@ohif/app 3.13.0-beta.122 → 3.13.0-beta.123
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/{1206.bundle.e04ca1efe6f987ba.js → 1206.bundle.8ca95ea92d278d25.js} +1 -1
- package/dist/{1602.bundle.cd2e106bd1438fbb.js → 1602.bundle.adc9c42f3f0cee10.js} +4 -4
- package/dist/{2493.bundle.f3b6a64d158365da.js → 2493.bundle.d16ea70ddcc1fb6b.js} +68 -12
- package/dist/{7231.bundle.1063d727ad99108a.js → 2623.bundle.983a376f7b7e86a5.js} +142 -33
- package/dist/{3330.bundle.b1297ef8c94e5440.js → 3330.bundle.1b8bc8f7c4071336.js} +46 -2
- package/dist/{3500.bundle.153e80b55f1dedb4.js → 3500.bundle.642aa0112968cf71.js} +1 -1
- package/dist/{3568.bundle.45dc681ef6890166.js → 3568.bundle.9aa4b4b27294ff6d.js} +41 -10
- package/dist/{3760.bundle.040c5960d2324a23.js → 3760.bundle.5e5d19b9f8d56cae.js} +4 -4
- package/dist/{5189.bundle.ea191ea99047fd6f.js → 5189.bundle.fc73612f2e198892.js} +2 -2
- package/dist/{5448.bundle.5686ebb99c379f64.js → 5448.bundle.316b091e38440aef.js} +1 -1
- package/dist/{5910.bundle.0f19608f3e76859b.js → 5910.bundle.d9cbcbb62ddd6638.js} +2 -2
- package/dist/{6495.bundle.a6764fdb8c0c252f.js → 6495.bundle.5ad5a10d2c9dcba1.js} +48 -3
- package/dist/{7248.bundle.ffc730f7131663b5.js → 7248.bundle.1b52f19fbd2bbc40.js} +28 -10
- package/dist/{7499.bundle.cf7e3863a046ea45.js → 7499.bundle.e958878c66174ab0.js} +74 -29
- package/dist/{781.bundle.f8fe016b3c6f7247.js → 781.bundle.f6fa3ab2b8ec22a5.js} +100 -45
- package/dist/{8423.bundle.edee0022549d0a69.js → 8423.bundle.d9be5db38ca5b9cd.js} +2 -2
- package/dist/{5642.bundle.98e17a4413db6ef1.js → 8478.bundle.163d258bf75a0aed.js} +32847 -7919
- package/dist/{8668.bundle.0e47f7231aa07da2.js → 8668.bundle.e254939790f776e2.js} +44 -0
- package/dist/{8832.bundle.d5469e59f146f5ab.js → 8832.bundle.62e66fad140b5182.js} +3 -3
- package/dist/{2343.bundle.2f0d1dcc2c98c6ef.js → 89.bundle.fe29d1712fd47341.js} +16340 -1013
- package/dist/{899.bundle.50c16f860acbc848.js → 899.bundle.b012ed530e343897.js} +2 -2
- package/dist/{9068.bundle.95f1e638ef694ea9.js → 9068.bundle.13173c70d4f33cf0.js} +2 -2
- package/dist/{9415.bundle.4631e14c554852b8.js → 9415.bundle.3044caa6fbf3e331.js} +2 -2
- package/dist/app-config.js +16 -0
- package/dist/{app.bundle.41cbf372286f0f33.js → app.bundle.ce26bd25f1b2d6eb.js} +291 -41
- package/dist/{compute.bundle.9cc3697d07fbb082.js → compute.bundle.690de60973ccebc4.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.a526954fc2fed311.js → polySeg.bundle.369c7996934b22e3.js} +1 -1
- package/dist/sw.js +1 -1
- package/package.json +6 -6
- package/dist/8432.bundle.7d5ebe1ed1610bc3.js +0 -24931
- package/dist/8595.css +0 -2
- package/dist/9402.bundle.d6f2b78374472970.js +0 -13041
- /package/dist/{100.bundle.0d3d69d5df0349ed.js → 100.bundle.a747be7c54b03050.js} +0 -0
- /package/dist/{1180.bundle.7e332fa34109403e.js → 1180.bundle.12decb70e347ab18.js} +0 -0
- /package/dist/{1483.bundle.2b4770a9bcbc979a.js → 1483.bundle.5d7cb3b2c8339993.js} +0 -0
- /package/dist/{7231.css → 2623.css} +0 -0
- /package/dist/{2779.bundle.5dc197604cc6ef42.js → 2779.bundle.50f6254deda46e49.js} +0 -0
- /package/dist/{4556.bundle.51ef7351e956466c.js → 4556.bundle.1ea04fd48fc5d2ca.js} +0 -0
- /package/dist/{4683.bundle.21c60514c9d785fa.js → 4683.bundle.b560312b5eebd925.js} +0 -0
- /package/dist/{5696.bundle.e69c9f340e70968a.js → 5696.bundle.78c7e21c71846f7b.js} +0 -0
- /package/dist/{6749.bundle.454ea7ca21d3c0a8.js → 6749.bundle.87258a158729e73d.js} +0 -0
- /package/dist/{8492.bundle.b065c8a96d49950a.js → 8492.bundle.1dbc1691c7db0e87.js} +0 -0
- /package/dist/{9116.bundle.8f9fc67d1fb2ac81.js → 9116.bundle.3173fbc0a9246402.js} +0 -0
- /package/dist/{9290.bundle.52e56719bbca68ff.js → 9290.bundle.e84eec85a00eb7a1.js} +0 -0
- /package/dist/{9383.bundle.ec44c452ccc23e93.js → 9383.bundle.885123e100c1b477.js} +0 -0
- /package/dist/{9437.bundle.72f5fd25db7e85f2.js → 9437.bundle.dabd58171e5f91e9.js} +0 -0
- /package/dist/{9560.bundle.517f0ef7ee3a20bf.js → 9560.bundle.4c9bc48e09c0bae1.js} +0 -0
|
@@ -9,7 +9,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
9
9
|
/* import */ var prop_types__rspack_import_1 = __webpack_require__(97598);
|
|
10
10
|
/* import */ var prop_types__rspack_import_1_default = /*#__PURE__*/__webpack_require__.n(prop_types__rspack_import_1);
|
|
11
11
|
/* import */ var _ohif_ui_next__rspack_import_2 = __webpack_require__(39987);
|
|
12
|
-
/* import */ var _ohif_extension_cornerstone__rspack_import_3 = __webpack_require__(
|
|
12
|
+
/* import */ var _ohif_extension_cornerstone__rspack_import_3 = __webpack_require__(75609);
|
|
13
13
|
/* import */ var _cornerstonejs_tools__rspack_import_4 = __webpack_require__(55526);
|
|
14
14
|
/* import */ var _getContextModule__rspack_import_5 = __webpack_require__(28835);
|
|
15
15
|
/* import */ var _cornerstonejs_core__rspack_import_6 = __webpack_require__(88479);
|
|
@@ -1114,10 +1114,10 @@ function WorkflowPanel({
|
|
|
1114
1114
|
|
|
1115
1115
|
|
|
1116
1116
|
|
|
1117
|
-
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts +
|
|
1118
|
-
var default_src = __webpack_require__(
|
|
1119
|
-
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx +
|
|
1120
|
-
var cornerstone_src = __webpack_require__(
|
|
1117
|
+
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 148 modules
|
|
1118
|
+
var default_src = __webpack_require__(50904);
|
|
1119
|
+
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 211 modules
|
|
1120
|
+
var cornerstone_src = __webpack_require__(75609);
|
|
1121
1121
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dynamic-volume/src/panels/DynamicExport.tsx
|
|
1122
1122
|
|
|
1123
1123
|
|
|
@@ -34559,11 +34559,24 @@ class DefaultPlanarDataProvider {
|
|
|
34559
34559
|
const imageIds = imageVolume.imageIds
|
|
34560
34560
|
? imageVolume.imageIds
|
|
34561
34561
|
: dataSet.imageIds;
|
|
34562
|
+
let volumeInitialImageIdIndex = initialImageIdIndex;
|
|
34563
|
+
if (initialImageIdIndex !== undefined && imageIds !== dataSet.imageIds) {
|
|
34564
|
+
const requestedImageId = dataSet.imageIds[initialImageIdIndex];
|
|
34565
|
+
const remappedIndex = imageIds.indexOf(requestedImageId);
|
|
34566
|
+
if (remappedIndex >= 0) {
|
|
34567
|
+
volumeInitialImageIdIndex = remappedIndex;
|
|
34568
|
+
}
|
|
34569
|
+
else {
|
|
34570
|
+
console.warn(`[PlanarViewport] initialImageIdIndex remap failed: imageId ` +
|
|
34571
|
+
`"${requestedImageId}" not found in the volume imageIds; ` +
|
|
34572
|
+
`using the original index ${initialImageIdIndex}`);
|
|
34573
|
+
}
|
|
34574
|
+
}
|
|
34562
34575
|
return {
|
|
34563
34576
|
id: dataId,
|
|
34564
34577
|
type: 'image',
|
|
34565
34578
|
imageIds,
|
|
34566
|
-
initialImageIdIndex,
|
|
34579
|
+
initialImageIdIndex: volumeInitialImageIdIndex,
|
|
34567
34580
|
acquisitionOrientation: options.acquisitionOrientation,
|
|
34568
34581
|
imageData: dataSet.imageData,
|
|
34569
34582
|
imageVolume,
|
|
@@ -38838,6 +38851,7 @@ function getPlanarResolvedViewForReference(args) {
|
|
|
38838
38851
|
|
|
38839
38852
|
|
|
38840
38853
|
|
|
38854
|
+
|
|
38841
38855
|
class PlanarViewReferenceController {
|
|
38842
38856
|
constructor(host) {
|
|
38843
38857
|
this.host = host;
|
|
@@ -39086,7 +39100,7 @@ class PlanarViewReferenceController {
|
|
|
39086
39100
|
const effectiveViewPlaneNormal = refViewPlaneNormal ?? currentViewPlaneNormal;
|
|
39087
39101
|
const isOppositeNormal = !shouldReorient &&
|
|
39088
39102
|
this.areNormalsOpposite(currentViewPlaneNormal, effectiveViewPlaneNormal);
|
|
39089
|
-
const
|
|
39103
|
+
const sliceTarget = this.resolveVolumeReferenceSliceTarget(referenceContext, normalizedViewRef, effectiveViewPlaneNormal, isOppositeNormal);
|
|
39090
39104
|
const viewStatePatch = {};
|
|
39091
39105
|
if (shouldReorient && refViewPlaneNormal) {
|
|
39092
39106
|
viewStatePatch.orientation = {
|
|
@@ -39099,8 +39113,9 @@ class PlanarViewReferenceController {
|
|
|
39099
39113
|
};
|
|
39100
39114
|
}
|
|
39101
39115
|
const sliceWorldPoint = normalizedViewRef.cameraFocalPoint ??
|
|
39102
|
-
|
|
39103
|
-
|
|
39116
|
+
sliceTarget?.sliceWorldPoint ??
|
|
39117
|
+
(typeof sliceTarget?.imageIdIndex === 'number'
|
|
39118
|
+
? this.host.getVolumeSliceWorldPointForImageIdIndex(sliceTarget.imageIdIndex)
|
|
39104
39119
|
: undefined);
|
|
39105
39120
|
if (sliceWorldPoint) {
|
|
39106
39121
|
viewStatePatch.slice = {
|
|
@@ -39178,7 +39193,7 @@ class PlanarViewReferenceController {
|
|
|
39178
39193
|
(!planeRestriction.inPlaneVector2 ||
|
|
39179
39194
|
(0,utilities_isEqual/* ["default"] */.Ay)(0, esm/* .vec3.dot */.eR.Om(viewPlaneNormal, planeRestriction.inPlaneVector2))));
|
|
39180
39195
|
}
|
|
39181
|
-
|
|
39196
|
+
resolveVolumeReferenceSliceTarget(referenceContext, viewRef, effectiveViewPlaneNormal, isOppositeNormal) {
|
|
39182
39197
|
const { rendering } = referenceContext;
|
|
39183
39198
|
if (rendering.renderMode !== types/* .ActorRenderMode.CPU_VOLUME */.T.CPU_VOLUME &&
|
|
39184
39199
|
rendering.renderMode !== types/* .ActorRenderMode.VTK_VOLUME_SLICE */.T.VTK_VOLUME_SLICE) {
|
|
@@ -39192,21 +39207,35 @@ class PlanarViewReferenceController {
|
|
|
39192
39207
|
const targetSliceIndex = isOppositeNormal
|
|
39193
39208
|
? maxImageIdIndex - viewRef.sliceIndex
|
|
39194
39209
|
: viewRef.sliceIndex;
|
|
39195
|
-
return
|
|
39210
|
+
return {
|
|
39211
|
+
imageIdIndex: Math.min(Math.max(0, targetSliceIndex), maxImageIdIndex),
|
|
39212
|
+
};
|
|
39196
39213
|
}
|
|
39197
39214
|
const referencedImageIndex = this.findImageIdIndexByReference(imageIds, viewRef.referencedImageId, viewRef.referencedImageURI);
|
|
39198
39215
|
if (typeof referencedImageIndex === 'number') {
|
|
39199
|
-
return referencedImageIndex;
|
|
39216
|
+
return this.toVolumeSliceTarget(rendering.imageVolume, referencedImageIndex);
|
|
39200
39217
|
}
|
|
39201
39218
|
const targetPoint = viewRef.cameraFocalPoint ?? viewRef.planeRestriction?.point;
|
|
39202
39219
|
if (targetPoint) {
|
|
39203
39220
|
const referencedImageId = (0,getClosestImageId/* ["default"] */.A)(rendering.imageVolume, targetPoint, effectiveViewPlaneNormal);
|
|
39204
|
-
|
|
39221
|
+
const closestImageIndex = this.findImageIdIndexByReference(imageIds, referencedImageId);
|
|
39222
|
+
if (typeof closestImageIndex === 'number') {
|
|
39223
|
+
return this.toVolumeSliceTarget(rendering.imageVolume, closestImageIndex);
|
|
39224
|
+
}
|
|
39225
|
+
return;
|
|
39205
39226
|
}
|
|
39206
39227
|
if (typeof viewRef.sliceIndex === 'number') {
|
|
39207
|
-
return
|
|
39228
|
+
return {
|
|
39229
|
+
imageIdIndex: Math.min(Math.max(0, viewRef.sliceIndex), maxImageIdIndex),
|
|
39230
|
+
};
|
|
39208
39231
|
}
|
|
39209
39232
|
}
|
|
39233
|
+
toVolumeSliceTarget(imageVolume, imageIdListIndex) {
|
|
39234
|
+
const sliceWorldPoint = (0,planarSliceBasis/* .getVolumeImageIdIndexWorldPoint */.xH)(imageVolume, imageIdListIndex);
|
|
39235
|
+
return sliceWorldPoint
|
|
39236
|
+
? { sliceWorldPoint }
|
|
39237
|
+
: { imageIdIndex: imageIdListIndex };
|
|
39238
|
+
}
|
|
39210
39239
|
getImageIdsForReferenceContext(referenceContext) {
|
|
39211
39240
|
return (referenceContext.data.imageVolume?.imageIds ||
|
|
39212
39241
|
referenceContext.data.imageIds);
|
|
@@ -40309,6 +40338,15 @@ class PlanarViewport extends GenericViewport/* ["default"] */.A {
|
|
|
40309
40338
|
const initialImageIdIndex = orientation === enums.OrientationAxis.ACQUISITION
|
|
40310
40339
|
? planarData.initialImageIdIndex
|
|
40311
40340
|
: undefined;
|
|
40341
|
+
if (typeof initialImageIdIndex === 'number') {
|
|
40342
|
+
const sliceWorldPoint = (0,planarSliceBasis/* .getVolumeImageIdIndexWorldPoint */.xH)(planarData.imageVolume, initialImageIdIndex);
|
|
40343
|
+
if (sliceWorldPoint) {
|
|
40344
|
+
return {
|
|
40345
|
+
kind: 'volumePoint',
|
|
40346
|
+
sliceWorldPoint,
|
|
40347
|
+
};
|
|
40348
|
+
}
|
|
40349
|
+
}
|
|
40312
40350
|
const { sliceBasis } = createSliceBasis({
|
|
40313
40351
|
canvasHeight: height,
|
|
40314
40352
|
canvasWidth: width,
|
|
@@ -41861,6 +41899,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
41861
41899
|
vu: () => (/* binding */ createPlanarCpuVolumeSliceBasis),
|
|
41862
41900
|
IY: () => (/* binding */ createPlanarImageSliceBasis),
|
|
41863
41901
|
P8: () => (/* binding */ createPlanarVolumeSliceBasis),
|
|
41902
|
+
xH: () => (/* binding */ getVolumeImageIdIndexWorldPoint),
|
|
41864
41903
|
Dn: () => (/* binding */ resolvePlanarVolumeImageIdIndex),
|
|
41865
41904
|
LK: () => (/* binding */ shouldUsePlanarCpuVolumeSliceBasis)
|
|
41866
41905
|
});
|
|
@@ -42068,6 +42107,23 @@ function getGeometricImageVolumeCenter(imageVolume, viewPlaneNormal) {
|
|
|
42068
42107
|
}
|
|
42069
42108
|
return esm/* .vec3.scale */.eR.hs(center, center, 1 / corners.length);
|
|
42070
42109
|
}
|
|
42110
|
+
function getVolumeImageIdIndexWorldPoint(imageVolume, imageIdIndex) {
|
|
42111
|
+
const imageData = imageVolume?.imageData;
|
|
42112
|
+
if (!imageData) {
|
|
42113
|
+
return;
|
|
42114
|
+
}
|
|
42115
|
+
const dimensions = imageData.getDimensions();
|
|
42116
|
+
const flatToGroupLocal = imageVolume.flatImageIdIndexToImageIdIndex;
|
|
42117
|
+
const groupLocalIndex = typeof flatToGroupLocal === 'function'
|
|
42118
|
+
? flatToGroupLocal.call(imageVolume, Math.max(0, imageIdIndex))
|
|
42119
|
+
: imageIdIndex;
|
|
42120
|
+
const k = Math.min(Math.max(0, groupLocalIndex), dimensions[2] - 1);
|
|
42121
|
+
return imageData.indexToWorld([
|
|
42122
|
+
(dimensions[0] - 1) / 2,
|
|
42123
|
+
(dimensions[1] - 1) / 2,
|
|
42124
|
+
k,
|
|
42125
|
+
]);
|
|
42126
|
+
}
|
|
42071
42127
|
function getSliceMetrics(args) {
|
|
42072
42128
|
const { imageVolume, viewPlaneNormal } = args;
|
|
42073
42129
|
const corners = buildImageVolumeCorners(imageVolume);
|
|
@@ -81342,7 +81398,7 @@ function worldToImageCoords(imageId, worldCoords) {
|
|
|
81342
81398
|
},
|
|
81343
81399
|
22202() {
|
|
81344
81400
|
"use strict";
|
|
81345
|
-
const version = '5.4.
|
|
81401
|
+
const version = '5.4.17';
|
|
81346
81402
|
|
|
81347
81403
|
|
|
81348
81404
|
},
|
|
@@ -82115,7 +82171,7 @@ const TransferSyntaxes = {
|
|
|
82115
82171
|
|
|
82116
82172
|
|
|
82117
82173
|
;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/metadata/dist/esm/version.js
|
|
82118
|
-
const version = '5.4.
|
|
82174
|
+
const version = '5.4.17';
|
|
82119
82175
|
|
|
82120
82176
|
;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/metadata/dist/esm/metaData.js
|
|
82121
82177
|
|
|
@@ -96438,7 +96494,7 @@ __webpack_require__.d(logging_namespaceObject, {
|
|
|
96438
96494
|
|
|
96439
96495
|
|
|
96440
96496
|
;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/utils/dist/esm/version.js
|
|
96441
|
-
const version = '5.4.
|
|
96497
|
+
const version = '5.4.17';
|
|
96442
96498
|
|
|
96443
96499
|
;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/utils/dist/esm/utilities/object/asArray.js
|
|
96444
96500
|
function asArray(item) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(globalThis["rspackChunk"] = globalThis["rspackChunk"] || []).push([[
|
|
3
|
-
|
|
2
|
+
(globalThis["rspackChunk"] = globalThis["rspackChunk"] || []).push([[2623], {
|
|
3
|
+
27074(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
4
4
|
// ESM COMPAT FLAG
|
|
5
5
|
__webpack_require__.r(__webpack_exports__);
|
|
6
6
|
|
|
@@ -27,12 +27,74 @@ var prop_types = __webpack_require__(97598);
|
|
|
27
27
|
var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
|
|
28
28
|
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/utils/getLegacyViewportType.ts
|
|
29
29
|
var getLegacyViewportType = __webpack_require__(50342);
|
|
30
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/viewportDataShape.ts
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Pre-mount classification of a viewport's bound data (viewportData from
|
|
35
|
+
* CornerstoneCacheService), for code that runs before — or independently of —
|
|
36
|
+
* a live viewport instance (overlays, scrollbars). Native ("next") viewports
|
|
37
|
+
* collapse stack/volume onto a single PLANAR_NEXT viewportType, so these
|
|
38
|
+
* helpers classify by the persisted dataShapeType and the data shape itself
|
|
39
|
+
* (imageIds = stack, volume/volumeId = volume) instead of the runtime type.
|
|
40
|
+
*
|
|
41
|
+
* For classification of a LIVE viewport instance, use
|
|
42
|
+
* `getViewportAdapter(viewport).getShape()` instead.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/** The primary (non-overlay) datum of a viewportData. */
|
|
46
|
+
function getPrimaryViewportDatum(viewportData) {
|
|
47
|
+
return Array.isArray(viewportData?.data) ? viewportData.data[0] : viewportData?.data;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** True when the primary datum is volume-shaped (volume/volumeId present). */
|
|
51
|
+
function isVolumeViewportData(viewportData) {
|
|
52
|
+
const firstData = getPrimaryViewportDatum(viewportData);
|
|
53
|
+
return !!(firstData && (firstData.volume || firstData.volumeId));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The stack/volume shape a viewportData was built for, transparent across the
|
|
58
|
+
* native type collapse: the persisted dataShapeType when present (set by
|
|
59
|
+
* CornerstoneCacheService on the native path), else the legacy viewportType.
|
|
60
|
+
*/
|
|
61
|
+
function getViewportDataShapeType(viewportData) {
|
|
62
|
+
return viewportData?.dataShapeType ?? viewportData?.viewportType;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The slice-navigation event for this viewport's content. Resolved from the
|
|
67
|
+
* legacy viewportType when it is meaningful, else from the bound data shape —
|
|
68
|
+
* which is known immediately, unlike a runtime content-mode check that may not
|
|
69
|
+
* be ready while a native viewport is still binding. Native viewports emit the
|
|
70
|
+
* same STACK_NEW_IMAGE / VOLUME_NEW_IMAGE events as legacy.
|
|
71
|
+
*/
|
|
72
|
+
function getSliceEventName(viewportData) {
|
|
73
|
+
const {
|
|
74
|
+
viewportType
|
|
75
|
+
} = viewportData;
|
|
76
|
+
const firstData = getPrimaryViewportDatum(viewportData);
|
|
77
|
+
return viewportType === esm.Enums.ViewportType.STACK && esm.Enums.Events.STACK_NEW_IMAGE || viewportType === esm.Enums.ViewportType.ORTHOGRAPHIC && esm.Enums.Events.VOLUME_NEW_IMAGE || isVolumeViewportData(viewportData) && esm.Enums.Events.VOLUME_NEW_IMAGE || firstData?.imageIds && esm.Enums.Events.STACK_NEW_IMAGE || esm.Enums.Events.IMAGE_RENDERED;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The slice count for a viewport. `viewport.getNumberOfSlices()` can be
|
|
82
|
+
* premature while a native viewport is still binding its data (it returns 1
|
|
83
|
+
* until then). For an image stack the count is known from the bound data, so
|
|
84
|
+
* prefer that and only fall back to the viewport for volume/MPR (where the
|
|
85
|
+
* count depends on orientation).
|
|
86
|
+
*/
|
|
87
|
+
function getViewportSliceCount(viewportData, viewport) {
|
|
88
|
+
const firstData = getPrimaryViewportDatum(viewportData);
|
|
89
|
+
return !isVolumeViewportData(viewportData) && firstData?.imageIds?.length || viewport.getNumberOfSlices();
|
|
90
|
+
}
|
|
30
91
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx
|
|
31
92
|
|
|
32
93
|
|
|
33
94
|
|
|
34
95
|
|
|
35
96
|
|
|
97
|
+
|
|
36
98
|
function CornerstoneImageScrollbar({
|
|
37
99
|
viewportData,
|
|
38
100
|
viewportId,
|
|
@@ -76,9 +138,9 @@ function CornerstoneImageScrollbar({
|
|
|
76
138
|
}
|
|
77
139
|
try {
|
|
78
140
|
const imageIndex = viewport.getCurrentImageIdIndex();
|
|
79
|
-
const numberOfSlices = viewport
|
|
141
|
+
const numberOfSlices = getViewportSliceCount(viewportData, viewport);
|
|
80
142
|
setImageSliceData({
|
|
81
|
-
imageIndex
|
|
143
|
+
imageIndex,
|
|
82
144
|
numberOfSlices
|
|
83
145
|
});
|
|
84
146
|
} catch (error) {
|
|
@@ -89,10 +151,7 @@ function CornerstoneImageScrollbar({
|
|
|
89
151
|
if (!viewportData) {
|
|
90
152
|
return;
|
|
91
153
|
}
|
|
92
|
-
const
|
|
93
|
-
viewportType
|
|
94
|
-
} = viewportData;
|
|
95
|
-
const eventId = viewportType === esm.Enums.ViewportType.STACK && esm.Enums.Events.STACK_NEW_IMAGE || viewportType === esm.Enums.ViewportType.ORTHOGRAPHIC && esm.Enums.Events.VOLUME_NEW_IMAGE || esm.Enums.Events.IMAGE_RENDERED;
|
|
154
|
+
const eventId = getSliceEventName(viewportData);
|
|
96
155
|
const updateIndex = event => {
|
|
97
156
|
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
98
157
|
if (!viewport || (0,getLegacyViewportType/* .isVolume3DViewportType */.Ov)(viewport)) {
|
|
@@ -132,6 +191,8 @@ CornerstoneImageScrollbar.propTypes = {
|
|
|
132
191
|
servicesManager: (prop_types_default()).object.isRequired
|
|
133
192
|
};
|
|
134
193
|
/* export default */ const ViewportImageScrollbar = (CornerstoneImageScrollbar);
|
|
194
|
+
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/services/ViewportService/adapter/index.ts + 3 modules
|
|
195
|
+
var ViewportService_adapter = __webpack_require__(71166);
|
|
135
196
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/Overlays/ViewportSliceProgressScrollbar/helpers.ts
|
|
136
197
|
|
|
137
198
|
|
|
@@ -156,11 +217,18 @@ function isProgressFullMode(viewportData, viewport) {
|
|
|
156
217
|
if (!viewportData || !viewport || (0,getLegacyViewportType/* .isVolume3DViewportType */.Ov)(viewport)) {
|
|
157
218
|
return false;
|
|
158
219
|
}
|
|
159
|
-
|
|
220
|
+
|
|
221
|
+
// A stack renders the full progress UI; an acquisition-plane volume is the
|
|
222
|
+
// volume-mode equivalent. The adapter classifies both lanes (legacy by
|
|
223
|
+
// viewport type / isInAcquisitionPlane; native by content mode + view-state
|
|
224
|
+
// orientation, since PLANAR_NEXT collapses the runtime type).
|
|
225
|
+
const adapter = (0,ViewportService_adapter/* .getViewportAdapter */.qU)(viewport);
|
|
226
|
+
const shape = adapter.getShape();
|
|
227
|
+
if (shape === 'stack') {
|
|
160
228
|
return true;
|
|
161
229
|
}
|
|
162
|
-
if (
|
|
163
|
-
return
|
|
230
|
+
if (shape === 'volume') {
|
|
231
|
+
return adapter.isInAcquisitionPlane();
|
|
164
232
|
}
|
|
165
233
|
return false;
|
|
166
234
|
}
|
|
@@ -174,6 +242,7 @@ function getImageIdFromCacheEvent(event) {
|
|
|
174
242
|
|
|
175
243
|
|
|
176
244
|
|
|
245
|
+
|
|
177
246
|
function useProgressScrollbarMode({
|
|
178
247
|
viewportData,
|
|
179
248
|
viewportId,
|
|
@@ -242,23 +311,51 @@ function useViewportSliceSync({
|
|
|
242
311
|
if (!viewportData) {
|
|
243
312
|
return;
|
|
244
313
|
}
|
|
245
|
-
|
|
246
|
-
|
|
314
|
+
|
|
315
|
+
// Last values we pushed, so re-seeding on camera changes does not churn React
|
|
316
|
+
// state on pure pan/zoom (which keep the slice geometry unchanged).
|
|
317
|
+
const lastSlice = {
|
|
318
|
+
imageIndex: -1,
|
|
319
|
+
numberOfSlices: -1
|
|
320
|
+
};
|
|
321
|
+
const pushSliceData = (imageIndex, numberOfSlices) => {
|
|
322
|
+
if (imageIndex === lastSlice.imageIndex && numberOfSlices === lastSlice.numberOfSlices) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
lastSlice.imageIndex = imageIndex;
|
|
326
|
+
lastSlice.numberOfSlices = numberOfSlices;
|
|
327
|
+
setImageSliceData({
|
|
328
|
+
imageIndex,
|
|
329
|
+
numberOfSlices
|
|
330
|
+
});
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
// Seeds the shared slice state from the live viewport. Re-run on the initial
|
|
334
|
+
// effect and on camera/orientation changes (below).
|
|
335
|
+
const syncFromViewport = () => {
|
|
336
|
+
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
337
|
+
if (!viewport || (0,getLegacyViewportType/* .isVolume3DViewportType */.Ov)(viewport)) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
247
340
|
try {
|
|
248
341
|
const currentImageIndex = viewport.getCurrentImageIdIndex();
|
|
249
|
-
const currentNumberOfSlices = viewport
|
|
250
|
-
|
|
251
|
-
imageIndex: currentImageIndex,
|
|
252
|
-
numberOfSlices: currentNumberOfSlices
|
|
253
|
-
});
|
|
342
|
+
const currentNumberOfSlices = getViewportSliceCount(viewportData, viewport);
|
|
343
|
+
pushSliceData(currentImageIndex, currentNumberOfSlices);
|
|
254
344
|
} catch (error) {
|
|
255
345
|
console.warn(error);
|
|
256
346
|
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
347
|
+
};
|
|
348
|
+
syncFromViewport();
|
|
349
|
+
|
|
350
|
+
// A post-mount camera carry (e.g. the layout-selector MPR protocol restoring
|
|
351
|
+
// the prior stack slice onto the freshly-mounted volume viewport) moves the
|
|
352
|
+
// camera and fires its slice events synchronously during the mount — before
|
|
353
|
+
// these listeners attach and around the initial seed above — so the scrollbar
|
|
354
|
+
// can latch the mount-time index instead of the carried slice. Re-seed once on
|
|
355
|
+
// the next frame, after the mount+carry settles; pushSliceData makes it a
|
|
356
|
+
// no-op when nothing changed (no churn/flicker).
|
|
357
|
+
const reseedRaf = requestAnimationFrame(syncFromViewport);
|
|
358
|
+
const eventId = getSliceEventName(viewportData);
|
|
262
359
|
const updateIndex = event => {
|
|
263
360
|
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
264
361
|
if (!viewport || (0,getLegacyViewportType/* .isVolume3DViewportType */.Ov)(viewport)) {
|
|
@@ -269,14 +366,20 @@ function useViewportSliceSync({
|
|
|
269
366
|
return;
|
|
270
367
|
}
|
|
271
368
|
const nextNumberOfSlices = viewport.getNumberOfSlices();
|
|
272
|
-
|
|
273
|
-
imageIndex: nextImageIndex,
|
|
274
|
-
numberOfSlices: nextNumberOfSlices
|
|
275
|
-
});
|
|
369
|
+
pushSliceData(nextImageIndex, nextNumberOfSlices);
|
|
276
370
|
};
|
|
277
371
|
element.addEventListener(eventId, updateIndex);
|
|
372
|
+
// Native ("next") viewports keep the same viewportData across a stack->volume
|
|
373
|
+
// transition or an orientation change, so this effect does not re-run and the
|
|
374
|
+
// slice-navigation event above may not fire until the first scroll, leaving the
|
|
375
|
+
// scrollbar unseeded (or stale, with a now-wrong slice count). CAMERA_MODIFIED
|
|
376
|
+
// fires on those orientation/geometry changes, so re-seed from the viewport
|
|
377
|
+
// then; the pushSliceData guard makes pan/zoom (same geometry) a no-op.
|
|
378
|
+
element.addEventListener(esm.Enums.Events.CAMERA_MODIFIED, syncFromViewport);
|
|
278
379
|
return () => {
|
|
380
|
+
cancelAnimationFrame(reseedRaf);
|
|
279
381
|
element.removeEventListener(eventId, updateIndex);
|
|
382
|
+
element.removeEventListener(esm.Enums.Events.CAMERA_MODIFIED, syncFromViewport);
|
|
280
383
|
};
|
|
281
384
|
}, [viewportData, element, viewportId, cornerstoneViewportService, setImageSliceData]);
|
|
282
385
|
}
|
|
@@ -674,6 +777,8 @@ var hooks = __webpack_require__(2242);
|
|
|
674
777
|
|
|
675
778
|
|
|
676
779
|
|
|
780
|
+
|
|
781
|
+
|
|
677
782
|
const EPSILON = 1e-4;
|
|
678
783
|
const {
|
|
679
784
|
formatPN,
|
|
@@ -850,7 +955,7 @@ function getDisplaySets(viewportData, displaySetService) {
|
|
|
850
955
|
}
|
|
851
956
|
const getInstanceNumber = (viewportData, viewportId, imageIndex, cornerstoneViewportService) => {
|
|
852
957
|
let instanceNumber;
|
|
853
|
-
switch (viewportData
|
|
958
|
+
switch (getViewportDataShapeType(viewportData)) {
|
|
854
959
|
case esm.Enums.ViewportType.STACK:
|
|
855
960
|
instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex);
|
|
856
961
|
break;
|
|
@@ -901,10 +1006,10 @@ function _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewp
|
|
|
901
1006
|
if (!cornerstoneViewport) {
|
|
902
1007
|
return;
|
|
903
1008
|
}
|
|
904
|
-
const
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
}
|
|
1009
|
+
const viewPlaneNormal = (0,ViewportService_adapter/* .getViewportAdapter */.qU)(cornerstoneViewport).getViewPlaneNormal();
|
|
1010
|
+
if (!viewPlaneNormal) {
|
|
1011
|
+
return;
|
|
1012
|
+
}
|
|
908
1013
|
// checking if camera is looking at the acquisition plane (defined by the direction on the volume)
|
|
909
1014
|
|
|
910
1015
|
const scanAxisNormal = direction.slice(6, 9);
|
|
@@ -1055,6 +1160,7 @@ var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
|
|
1055
1160
|
|
|
1056
1161
|
|
|
1057
1162
|
|
|
1163
|
+
|
|
1058
1164
|
const {
|
|
1059
1165
|
getOrientationStringLPS,
|
|
1060
1166
|
invertOrientationStringLPS
|
|
@@ -1094,7 +1200,10 @@ function ViewportOrientationMarkers({
|
|
|
1094
1200
|
console.log(`ViewportOrientationMarkers :: No viewport (${viewportId})`);
|
|
1095
1201
|
return '';
|
|
1096
1202
|
}
|
|
1097
|
-
|
|
1203
|
+
|
|
1204
|
+
// Use the persisted data shape, not viewportType: a native stack reports
|
|
1205
|
+
// PLANAR_NEXT, which would skip this synthetic-IOP default-cosine guard.
|
|
1206
|
+
if (getViewportDataShapeType(viewportData) === esm.Enums.ViewportType.STACK) {
|
|
1098
1207
|
const imageIndex = imageSliceData.imageIndex;
|
|
1099
1208
|
const imageId = viewportData.data[0].imageIds?.[imageIndex];
|
|
1100
1209
|
|
|
@@ -8252,7 +8252,7 @@ const onSegmentationDataModified = function (evt) {
|
|
|
8252
8252
|
if (representationData.Labelmap) {
|
|
8253
8253
|
onLabelmapSegmentationDataModified(evt);
|
|
8254
8254
|
}
|
|
8255
|
-
|
|
8255
|
+
triggerSegmentationRenderForModified(segmentationId);
|
|
8256
8256
|
};
|
|
8257
8257
|
/* export default */ const segmentation_segmentationDataModifiedEventListener = ((/* unused pure expression or super */ null && (onSegmentationDataModified)));
|
|
8258
8258
|
|
|
@@ -10217,7 +10217,7 @@ var COLOR_LUT = __webpack_require__(69501);
|
|
|
10217
10217
|
|
|
10218
10218
|
|
|
10219
10219
|
;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/version.js
|
|
10220
|
-
const version = '5.4.
|
|
10220
|
+
const version = '5.4.17';
|
|
10221
10221
|
|
|
10222
10222
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/viewportPresentation.js
|
|
10223
10223
|
var viewportPresentation = __webpack_require__(88299);
|
|
@@ -36585,6 +36585,50 @@ function triggerSegmentationRender(viewportId) {
|
|
|
36585
36585
|
function triggerSegmentationRenderBySegmentationId(segmentationId) {
|
|
36586
36586
|
segmentationRenderingEngine.renderSegmentation(segmentationId);
|
|
36587
36587
|
}
|
|
36588
|
+
const DEFERRED_SEGMENTATION_RENDER_DELAY_MS = 240;
|
|
36589
|
+
const deferredSegmentationRenderTimers = new Map();
|
|
36590
|
+
function isProjectionHeavySegmentationViewport(viewport) {
|
|
36591
|
+
const blendMode = viewport.getBlendMode?.();
|
|
36592
|
+
if (blendMode === Enums.BlendModes.LABELMAP_EDGE_PROJECTION_BLEND) {
|
|
36593
|
+
return true;
|
|
36594
|
+
}
|
|
36595
|
+
const planarViewport = viewport;
|
|
36596
|
+
if (typeof planarViewport.getDisplaySetPresentation !== 'function') {
|
|
36597
|
+
return false;
|
|
36598
|
+
}
|
|
36599
|
+
const dataIds = [];
|
|
36600
|
+
const sourceDataId = planarViewport.getSourceDataId?.();
|
|
36601
|
+
if (sourceDataId) {
|
|
36602
|
+
dataIds.push(sourceDataId);
|
|
36603
|
+
}
|
|
36604
|
+
planarViewport.getActors?.().forEach((actorEntry) => {
|
|
36605
|
+
if (actorEntry.representationUID) {
|
|
36606
|
+
dataIds.push(String(actorEntry.representationUID));
|
|
36607
|
+
}
|
|
36608
|
+
});
|
|
36609
|
+
return dataIds.some((dataId) => (planarViewport.getDisplaySetPresentation(dataId)?.slabThickness ?? 0) > 0);
|
|
36610
|
+
}
|
|
36611
|
+
function triggerSegmentationRenderForModified(segmentationId) {
|
|
36612
|
+
const viewportIds = segmentationRenderingEngine._getViewportIdsForSegmentation(segmentationId);
|
|
36613
|
+
viewportIds.forEach((viewportId) => {
|
|
36614
|
+
const { viewport } = getEnabledElementByViewportId(viewportId) || {};
|
|
36615
|
+
if (!viewport) {
|
|
36616
|
+
return;
|
|
36617
|
+
}
|
|
36618
|
+
if (!isProjectionHeavySegmentationViewport(viewport)) {
|
|
36619
|
+
segmentationRenderingEngine.renderSegmentationsForViewport(viewportId);
|
|
36620
|
+
return;
|
|
36621
|
+
}
|
|
36622
|
+
const existingTimer = deferredSegmentationRenderTimers.get(viewportId);
|
|
36623
|
+
if (existingTimer !== undefined) {
|
|
36624
|
+
clearTimeout(existingTimer);
|
|
36625
|
+
}
|
|
36626
|
+
deferredSegmentationRenderTimers.set(viewportId, setTimeout(() => {
|
|
36627
|
+
deferredSegmentationRenderTimers.delete(viewportId);
|
|
36628
|
+
segmentationRenderingEngine.renderSegmentationsForViewport(viewportId);
|
|
36629
|
+
}, DEFERRED_SEGMENTATION_RENDER_DELAY_MS));
|
|
36630
|
+
});
|
|
36631
|
+
}
|
|
36588
36632
|
const segmentationRenderingEngine = new SegmentationRenderingEngine();
|
|
36589
36633
|
|
|
36590
36634
|
|
|
@@ -641,7 +641,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
|
|
|
641
641
|
|
|
642
642
|
|
|
643
643
|
const Component = /*#__PURE__*/react.lazy(() => {
|
|
644
|
-
return Promise.all(/* import() */ [__webpack_require__.e(
|
|
644
|
+
return Promise.all(/* import() */ [__webpack_require__.e(8478), __webpack_require__.e(89), __webpack_require__.e(5910)]).then(__webpack_require__.bind(__webpack_require__, 67329));
|
|
645
645
|
});
|
|
646
646
|
const OHIFCornerstoneRTViewport = props => {
|
|
647
647
|
return /*#__PURE__*/react.createElement(react.Suspense, {
|