@ohif/app 3.12.0-beta.104 → 3.12.0-beta.106

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 (46) hide show
  1. package/dist/{1403.bundle.ea5eb28d7e1c937ccbbf.js → 1403.bundle.b45c67c19dabf9c62ead.js} +2 -0
  2. package/dist/{1608.bundle.a25c80a3971ed6361b51.js → 1608.bundle.0687c661f1c9edfb3b8a.js} +2 -2
  3. package/dist/{1730.bundle.d1acf1f07ca5b3892f15.js → 1730.bundle.c9e0d9f751d8b24cfbe2.js} +4 -2
  4. package/dist/{1927.bundle.019331c266d306772371.js → 1927.bundle.3050588e95f43cf57cdd.js} +1 -1
  5. package/dist/{2701.bundle.e01a06411f68459ac955.js → 2701.bundle.12bd01a80a9f8ea4cd94.js} +2 -2
  6. package/dist/{2842.bundle.7852a204d3510fca8b27.js → 2842.bundle.72b8e407027b26a34584.js} +68 -101
  7. package/dist/{1903.bundle.27b8f13121796caad7a2.js → 3081.bundle.71a2f4b2706114346d67.js} +56 -9
  8. package/dist/{3343.bundle.f8fe9316b0ff68d087f7.js → 3343.bundle.d7578ce8f75d158c0bab.js} +2 -0
  9. package/dist/{3353.bundle.a0f1654c642395bbbbbc.js → 3353.bundle.7d5f628fe7eb8fe738ce.js} +146 -144
  10. package/dist/{3461.bundle.93c1d3ecf976a746f785.js → 3461.bundle.84ff305e012481a9ded5.js} +2 -2
  11. package/dist/{4019.bundle.01f63d5dd5b96ded0c00.js → 4019.bundle.cdb81fb4777792f6175d.js} +132 -10
  12. package/dist/{4202.bundle.fa6f6adfd3d08a1cdcd7.js → 4202.bundle.5a0f8e4004c5d8a68548.js} +1 -1
  13. package/dist/{4775.bundle.f463033dbb9c8da57d52.js → 4775.bundle.cc7c126b04c9c6214d9f.js} +2 -0
  14. package/dist/{4819.bundle.58e054b5b00d756e2d14.js → 4819.bundle.ce13d222206c192b78f8.js} +2 -2
  15. package/dist/{5028.bundle.862ac206a79ac2818f64.js → 5028.bundle.d011dac918b575c5472a.js} +2 -2
  16. package/dist/{5400.bundle.de97508611da1c00d58a.js → 5400.bundle.be4bdac337da734fdcd3.js} +1 -0
  17. package/dist/{5448.bundle.9a36e001169ea3bfeb6c.js → 5448.bundle.2a82fcfac24d62355154.js} +22 -6
  18. package/dist/{5462.bundle.a81a691eeef782ab95b9.js → 5462.bundle.21beddaca145b7465c72.js} +2 -0
  19. package/dist/{5549.bundle.d5def6a3124a3a481b7c.js → 5549.bundle.4d086f8682a317140e65.js} +159 -155
  20. package/dist/{6163.bundle.f327d1e8aea322893404.js → 6163.bundle.e0d7dbf2a795589d1ba0.js} +4 -2
  21. package/dist/{7412.bundle.aec4834a71fc27c4ce06.js → 7412.bundle.7b062eda3b01de135817.js} +119 -151
  22. package/dist/{7639.bundle.6444531fac0b110595e5.js → 7639.bundle.096a5aaabaff706ab769.js} +9 -5
  23. package/dist/{8305.bundle.b1fb25aa020e0d0faec8.js → 8305.bundle.b4a98270e518f46feaa0.js} +2 -2
  24. package/dist/{8558.bundle.6b45234a8d6365bff3b9.js → 8558.bundle.0fd075bf5ebda9511e73.js} +3 -1
  25. package/dist/{8583.bundle.246b35769cd393843c6e.js → 8583.bundle.7534fbaf03a232fd85c5.js} +2 -2
  26. package/dist/{9195.bundle.5f9be23bc1e8857cc478.js → 9195.bundle.6663852fdc83058f3686.js} +2 -2
  27. package/dist/{9845.bundle.155759f5e8d8070ee16f.js → 9845.bundle.255e7c7f7a88193b4e47.js} +2 -2
  28. package/dist/{9862.bundle.bb6b5cab9e8eda1cc675.js → 9862.bundle.2992313d0e19d394e6a5.js} +1 -1
  29. package/dist/app.bundle.css +1 -1
  30. package/dist/{app.bundle.41cd81f26da8a340185f.js → app.bundle.faddb2bd6978a85105c6.js} +75 -24
  31. package/dist/{compute.bundle.fdee4a0f193ee2e1b6da.js → compute.bundle.6f1bd84d7c7116ff82a4.js} +1 -1
  32. package/dist/index.html +1 -1
  33. package/dist/{polySeg.bundle.11f9746cd60c9811a412.js → polySeg.bundle.d4bcf15986821b88dec9.js} +1 -1
  34. package/dist/sw.js +1 -1
  35. package/package.json +21 -21
  36. /package/dist/{1459.bundle.5dc3647b918b624cead1.js → 1459.bundle.93b2412d40d25b566a2c.js} +0 -0
  37. /package/dist/{1933.bundle.d9f39020c89b72d593cc.js → 1933.bundle.a5eb66b39be97a7c6e1e.js} +0 -0
  38. /package/dist/{2018.bundle.3790d08e5f93c334eb29.js → 2018.bundle.17a0d310b03d6dbab3e4.js} +0 -0
  39. /package/dist/{213.bundle.4cdd711da5e5f19a6c76.js → 213.bundle.8e5031f961dbbf058e5d.js} +0 -0
  40. /package/dist/{2424.bundle.9bb3300eaecd20077a37.js → 2424.bundle.55a38e540e3ac2db94d5.js} +0 -0
  41. /package/dist/{5457.bundle.105e15da7973e5b61959.js → 5457.bundle.5357429ada1334292c6a.js} +0 -0
  42. /package/dist/{5485.bundle.07103c4b490382c0ee77.js → 5485.bundle.52d28268e556576dd215.js} +0 -0
  43. /package/dist/{5858.bundle.d5f4bf849aaeebf5025c.js → 5858.bundle.ff6b340cf7457db76a1a.js} +0 -0
  44. /package/dist/{6027.bundle.83186e7c3d210cd30320.js → 6027.bundle.4cb3d089c1bec23076d7.js} +0 -0
  45. /package/dist/{85.bundle.3cb557e3015e5c652610.js → 85.bundle.9855c5d5c7602012d954.js} +0 -0
  46. /package/dist/{9927.bundle.ca2f72f62468744559e4.js → 9927.bundle.d89e796c1107971d4277.js} +0 -0
@@ -109,6 +109,8 @@ var SegmentationRepresentations;
109
109
  /* harmony export */ });
110
110
  var StrategyCallbacks;
111
111
  (function (StrategyCallbacks) {
112
+ StrategyCallbacks["CalculateCursorGeometry"] = "calculateCursorGeometry";
113
+ StrategyCallbacks["RenderCursor"] = "renderCursor";
112
114
  StrategyCallbacks["OnInteractionStart"] = "onInteractionStart";
113
115
  StrategyCallbacks["OnInteractionEnd"] = "onInteractionEnd";
114
116
  StrategyCallbacks["Preview"] = "preview";
@@ -19,8 +19,8 @@ var prop_types = __webpack_require__(97598);
19
19
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20
20
  // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3075 modules
21
21
  var src = __webpack_require__(12517);
22
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 192 modules
23
- var cornerstone_src = __webpack_require__(71903);
22
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 193 modules
23
+ var cornerstone_src = __webpack_require__(63081);
24
24
  ;// ../../../extensions/cornerstone-dicom-rt/src/utils/promptHydrateRT.ts
25
25
 
26
26
  function promptHydrateRT({
@@ -109,6 +109,8 @@ var SegmentationRepresentations;
109
109
  /* harmony export */ });
110
110
  var StrategyCallbacks;
111
111
  (function (StrategyCallbacks) {
112
+ StrategyCallbacks["CalculateCursorGeometry"] = "calculateCursorGeometry";
113
+ StrategyCallbacks["RenderCursor"] = "renderCursor";
112
114
  StrategyCallbacks["OnInteractionStart"] = "onInteractionStart";
113
115
  StrategyCallbacks["OnInteractionEnd"] = "onInteractionEnd";
114
116
  StrategyCallbacks["Preview"] = "preview";
@@ -1413,8 +1415,8 @@ function WorkflowPanel({
1413
1415
 
1414
1416
  // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 139 modules
1415
1417
  var default_src = __webpack_require__(39195);
1416
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 192 modules
1417
- var cornerstone_src = __webpack_require__(71903);
1418
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 193 modules
1419
+ var cornerstone_src = __webpack_require__(63081);
1418
1420
  ;// ../../../extensions/cornerstone-dynamic-volume/src/panels/DynamicExport.tsx
1419
1421
 
1420
1422
 
@@ -170,7 +170,7 @@
170
170
  /******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
171
171
  /******/ __webpack_require__.u = (chunkId) => {
172
172
  /******/ // return url for filenames based on template
173
- /******/ return "" + chunkId + ".bundle." + {"732":"6978ac30a1e36abf06db","5858":"d5f4bf849aaeebf5025c","8094":"5c44190a325ac23e3e5c"}[chunkId] + ".js";
173
+ /******/ return "" + chunkId + ".bundle." + {"732":"6978ac30a1e36abf06db","5858":"ff6b340cf7457db76a1a","8094":"5c44190a325ac23e3e5c"}[chunkId] + ".js";
174
174
  /******/ };
175
175
  /******/ })();
176
176
  /******/
@@ -23,8 +23,8 @@ var src = __webpack_require__(42356);
23
23
  var dicomSRModule = __webpack_require__(76654);
24
24
  // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts
25
25
  var createReferencedImageDisplaySet = __webpack_require__(92643);
26
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 192 modules
27
- var cornerstone_src = __webpack_require__(71903);
26
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 193 modules
27
+ var cornerstone_src = __webpack_require__(63081);
28
28
  // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3075 modules
29
29
  var ui_next_src = __webpack_require__(12517);
30
30
  // EXTERNAL MODULE: ../../core/src/contextProviders/SystemProvider.tsx
@@ -2057,8 +2057,40 @@ function buildMetadata(image) {
2057
2057
 
2058
2058
 
2059
2059
 
2060
+ const DEFAULT_THICKNESS_SINGLE_SLICE = 1;
2061
+ function getPixelSpacingForCubicVoxel(metadata) {
2062
+ if (metadata.columnPixelSpacing !== undefined) {
2063
+ return metadata.columnPixelSpacing;
2064
+ }
2065
+ if (metadata.rowPixelSpacing !== undefined) {
2066
+ return metadata.rowPixelSpacing;
2067
+ }
2068
+ if (metadata.pixelSpacing?.[1] !== undefined) {
2069
+ return metadata.pixelSpacing[1];
2070
+ }
2071
+ if (metadata.pixelSpacing?.[0] !== undefined) {
2072
+ return metadata.pixelSpacing[0];
2073
+ }
2074
+ return undefined;
2075
+ }
2060
2076
  function calculateSpacingBetweenImageIds(imageIds) {
2061
2077
  const { imagePositionPatient: referenceImagePositionPatient, imageOrientationPatient, } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2078
+ if (imageIds.length === 1) {
2079
+ const { sliceThickness, spacingBetweenSlices, columnPixelSpacing, rowPixelSpacing, pixelSpacing, } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2080
+ if (sliceThickness)
2081
+ return sliceThickness;
2082
+ if (spacingBetweenSlices)
2083
+ return spacingBetweenSlices;
2084
+ const pixelSpacingValue = getPixelSpacingForCubicVoxel({
2085
+ columnPixelSpacing,
2086
+ rowPixelSpacing,
2087
+ pixelSpacing,
2088
+ });
2089
+ if (pixelSpacingValue !== undefined) {
2090
+ return pixelSpacingValue;
2091
+ }
2092
+ return DEFAULT_THICKNESS_SINGLE_SLICE;
2093
+ }
2062
2094
  const rowCosineVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(imageOrientationPatient[0], imageOrientationPatient[1], imageOrientationPatient[2]);
2063
2095
  const colCosineVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(imageOrientationPatient[3], imageOrientationPatient[4], imageOrientationPatient[5]);
2064
2096
  const scanAxisNormal = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
@@ -2093,8 +2125,6 @@ function calculateSpacingBetweenImageIds(imageIds) {
2093
2125
  imageIds[0],
2094
2126
  imageIds[Math.floor(imageIds.length / 2)],
2095
2127
  ];
2096
- const firstImageDistance = getDistance(prefetchedImageIds[0]);
2097
- const middleImageDistance = getDistance(prefetchedImageIds[1]);
2098
2128
  const metadataForMiddleImage = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', prefetchedImageIds[1]);
2099
2129
  if (!metadataForMiddleImage) {
2100
2130
  throw new Error('Incomplete metadata required for volume construction.');
@@ -2107,7 +2137,7 @@ function calculateSpacingBetweenImageIds(imageIds) {
2107
2137
  Math.abs(distanceBetweenFirstAndMiddleImages) /
2108
2138
  Math.floor(imageIds.length / 2);
2109
2139
  }
2110
- const { sliceThickness, spacingBetweenSlices } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2140
+ const { sliceThickness, spacingBetweenSlices, columnPixelSpacing, rowPixelSpacing, pixelSpacing, } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2111
2141
  const { strictZSpacingForVolumeViewport } = (0,_init__WEBPACK_IMPORTED_MODULE_2__/* .getConfiguration */ .D0)().rendering;
2112
2142
  if ((spacing === 0 || isNaN(spacing)) && !strictZSpacingForVolumeViewport) {
2113
2143
  if (spacingBetweenSlices) {
@@ -2119,8 +2149,18 @@ function calculateSpacingBetweenImageIds(imageIds) {
2119
2149
  spacing = sliceThickness;
2120
2150
  }
2121
2151
  else {
2122
- console.debug('Could not calculate spacing. The VolumeViewport visualization is compromised. Setting spacing to 1 to render');
2123
- spacing = 1;
2152
+ const pixelSpacingValue = getPixelSpacingForCubicVoxel({
2153
+ columnPixelSpacing,
2154
+ rowPixelSpacing,
2155
+ pixelSpacing,
2156
+ });
2157
+ if (pixelSpacingValue) {
2158
+ spacing = pixelSpacingValue;
2159
+ }
2160
+ else {
2161
+ console.debug(`Could not calculate spacing and no pixel spacing found. Using default thickness (${DEFAULT_THICKNESS_SINGLE_SLICE} mm)`);
2162
+ spacing = DEFAULT_THICKNESS_SINGLE_SLICE;
2163
+ }
2124
2164
  }
2125
2165
  }
2126
2166
  return spacing;
@@ -4279,7 +4319,7 @@ var isEqual = __webpack_require__(74638);
4279
4319
 
4280
4320
 
4281
4321
  function isValidVolume(imageIds) {
4282
- if (imageIds.length <= 1) {
4322
+ if (!imageIds.length) {
4283
4323
  return false;
4284
4324
  }
4285
4325
  const imageId0 = imageIds[0];
@@ -4877,6 +4917,8 @@ function scroll_scroll(viewport, options) {
4877
4917
  function scrollVolume(viewport, volumeId, delta, scrollSlabs = false) {
4878
4918
  const useSlabThickness = scrollSlabs;
4879
4919
  const { numScrollSteps, currentStepIndex, sliceRangeInfo } = (0,getVolumeViewportScrollInfo/* default */.A)(viewport, volumeId, useSlabThickness);
4920
+ if (numScrollSteps === 0)
4921
+ return;
4880
4922
  if (!sliceRangeInfo) {
4881
4923
  return;
4882
4924
  }
@@ -8808,12 +8850,10 @@ function defaultGetTextLines(data, targetId) {
8808
8850
  /* harmony import */ var _strategies_eraseSphere__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1989);
8809
8851
  /* harmony import */ var _strategies_fillCircle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(56789);
8810
8852
  /* harmony import */ var _strategies_eraseCircle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(33852);
8811
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74347);
8812
- /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7001);
8813
- /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(58640);
8814
- /* harmony import */ var _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(23631);
8815
- /* harmony import */ var _strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(40905);
8816
-
8853
+ /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7001);
8854
+ /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(58640);
8855
+ /* harmony import */ var _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(23631);
8856
+ /* harmony import */ var _strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(40905);
8817
8857
 
8818
8858
 
8819
8859
 
@@ -8825,7 +8865,7 @@ function defaultGetTextLines(data, targetId) {
8825
8865
 
8826
8866
 
8827
8867
 
8828
- class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A {
8868
+ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A {
8829
8869
  constructor(toolProps = {}, defaultToolProps = {
8830
8870
  supportedInteractionTypes: ['Mouse', 'Touch'],
8831
8871
  configuration: {
@@ -8912,7 +8952,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
8912
8952
  const { viewport } = enabledElement;
8913
8953
  this._editData = this.createEditData(element);
8914
8954
  this._activateDraw(element);
8915
- (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.hideElementCursor)(element);
8955
+ (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__.hideElementCursor)(element);
8916
8956
  evt.preventDefault();
8917
8957
  this._previewData.isDrag = false;
8918
8958
  this._previewData.timerStart = Date.now();
@@ -8926,7 +8966,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
8926
8966
  world: gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(worldPoint),
8927
8967
  };
8928
8968
  const hoverData = this._hoverData || this.createHoverData(element);
8929
- (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(hoverData.viewportIdsToRender);
8969
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(hoverData.viewportIdsToRender);
8930
8970
  const operationData = this.getOperationData(element);
8931
8971
  if (!operationData) {
8932
8972
  return false;
@@ -8935,6 +8975,9 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
8935
8975
  return true;
8936
8976
  };
8937
8977
  this.mouseMoveCallback = (evt) => {
8978
+ if (!this.isPrimary) {
8979
+ return;
8980
+ }
8938
8981
  if (this.mode === _enums__WEBPACK_IMPORTED_MODULE_2__.ToolModes.Active) {
8939
8982
  this.updateCursor(evt);
8940
8983
  if (!this.configuration.preview.enabled) {
@@ -8983,7 +9026,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
8983
9026
  }
8984
9027
  const { viewport } = enabledElement;
8985
9028
  const activeStrategy = this.configuration.activeStrategy;
8986
- const strategyData = (0,_strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_11__/* .getStrategyData */ .S)({
9029
+ const strategyData = (0,_strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_10__/* .getStrategyData */ .S)({
8987
9030
  operationData,
8988
9031
  viewport,
8989
9032
  strategy: activeStrategy,
@@ -9005,7 +9048,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
9005
9048
  const { viewport } = enabledElement;
9006
9049
  this.updateCursor(evt);
9007
9050
  const { viewportIdsToRender } = this._hoverData;
9008
- (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(viewportIdsToRender);
9051
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(viewportIdsToRender);
9009
9052
  const delta = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec2.distance */ .Zc.distance(currentPoints.canvas, this._previewData.startPoint);
9010
9053
  const { dragTimeMs, dragMoveDistance } = this.configuration.preview;
9011
9054
  if (!this._previewData.isDrag &&
@@ -9067,7 +9110,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
9067
9110
  }
9068
9111
  this.doneEditMemo();
9069
9112
  this._deactivateDraw(element);
9070
- (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.resetElementCursor)(element);
9113
+ (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__.resetElementCursor)(element);
9071
9114
  this.updateCursor(evt);
9072
9115
  this._editData = null;
9073
9116
  this._lastDragInfo = null;
@@ -9101,55 +9144,12 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
9101
9144
  if (!this._hoverData) {
9102
9145
  return;
9103
9146
  }
9104
- (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(this._hoverData.viewportIdsToRender);
9147
+ BrushTool.activeCursorTool = this;
9148
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(this._hoverData.viewportIdsToRender);
9105
9149
  }
9106
9150
  _calculateCursor(element, centerCanvas) {
9107
9151
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElement)(element);
9108
- const { viewport } = enabledElement;
9109
- const { canvasToWorld } = viewport;
9110
- const camera = viewport.getCamera();
9111
- const { brushSize } = this.configuration;
9112
- const viewUp = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.fromValues */ .eR.fromValues(camera.viewUp[0], camera.viewUp[1], camera.viewUp[2]);
9113
- const viewPlaneNormal = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.fromValues */ .eR.fromValues(camera.viewPlaneNormal[0], camera.viewPlaneNormal[1], camera.viewPlaneNormal[2]);
9114
- const viewRight = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
9115
- gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.cross */ .eR.cross(viewRight, viewUp, viewPlaneNormal);
9116
- const centerCursorInWorld = canvasToWorld([
9117
- centerCanvas[0],
9118
- centerCanvas[1],
9119
- ]);
9120
- const bottomCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
9121
- const topCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
9122
- const leftCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
9123
- const rightCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
9124
- for (let i = 0; i <= 2; i++) {
9125
- bottomCursorInWorld[i] = centerCursorInWorld[i] - viewUp[i] * brushSize;
9126
- topCursorInWorld[i] = centerCursorInWorld[i] + viewUp[i] * brushSize;
9127
- leftCursorInWorld[i] = centerCursorInWorld[i] - viewRight[i] * brushSize;
9128
- rightCursorInWorld[i] = centerCursorInWorld[i] + viewRight[i] * brushSize;
9129
- }
9130
- if (!this._hoverData) {
9131
- return;
9132
- }
9133
- const { brushCursor } = this._hoverData;
9134
- const { data } = brushCursor;
9135
- if (data.handles === undefined) {
9136
- data.handles = {};
9137
- }
9138
- data.handles.points = [
9139
- bottomCursorInWorld,
9140
- topCursorInWorld,
9141
- leftCursorInWorld,
9142
- rightCursorInWorld,
9143
- ];
9144
- const activeStrategy = this.configuration.activeStrategy;
9145
- const strategy = this.configuration.strategies[activeStrategy];
9146
- if (typeof strategy?.computeInnerCircleRadius === 'function') {
9147
- strategy.computeInnerCircleRadius({
9148
- configuration: this.configuration,
9149
- viewport,
9150
- });
9151
- }
9152
- data.invalidated = false;
9152
+ this.applyActiveStrategyCallback(enabledElement, this.getOperationData(element), _enums__WEBPACK_IMPORTED_MODULE_2__.StrategyCallbacks.CalculateCursorGeometry);
9153
9153
  }
9154
9154
  getStatistics(element, segmentIndices) {
9155
9155
  if (!element) {
@@ -9197,7 +9197,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
9197
9197
  this._hoverData.brushCursor.metadata.segmentColor = segmentColor;
9198
9198
  }
9199
9199
  renderAnnotation(enabledElement, svgDrawingHelper) {
9200
- if (!this._hoverData) {
9200
+ if (!this._hoverData || BrushTool.activeCursorTool !== this) {
9201
9201
  return;
9202
9202
  }
9203
9203
  const { viewport } = enabledElement;
@@ -9211,40 +9211,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
9211
9211
  const { element } = viewport;
9212
9212
  this._calculateCursor(element, centerCanvas);
9213
9213
  }
9214
- const toolMetadata = brushCursor.metadata;
9215
- if (!toolMetadata) {
9216
- return;
9217
- }
9218
- const annotationUID = toolMetadata.brushCursorUID;
9219
- const data = brushCursor.data;
9220
- const { points } = data.handles;
9221
- const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
9222
- const bottom = canvasCoordinates[0];
9223
- const top = canvasCoordinates[1];
9224
- const center = [
9225
- Math.floor((bottom[0] + top[0]) / 2),
9226
- Math.floor((bottom[1] + top[1]) / 2),
9227
- ];
9228
- const radius = Math.abs(bottom[1] - Math.floor((bottom[1] + top[1]) / 2));
9229
- const color = `rgb(${toolMetadata.segmentColor?.slice(0, 3) || [0, 0, 0]})`;
9230
- if (!viewport.getRenderingEngine()) {
9231
- console.warn('Rendering Engine has been destroyed');
9232
- return;
9233
- }
9234
- const circleUID = '0';
9235
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_7__.drawCircle)(svgDrawingHelper, annotationUID, circleUID, center, radius, {
9236
- color,
9237
- lineDash: this.centerSegmentIndexInfo.segmentIndex === 0 ? [1, 2] : null,
9238
- });
9239
- const { dynamicRadiusInCanvas } = this.configuration?.threshold || {
9240
- dynamicRadiusInCanvas: 0,
9241
- };
9242
- if (dynamicRadiusInCanvas) {
9243
- const circleUID1 = '1';
9244
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_7__.drawCircle)(svgDrawingHelper, annotationUID, circleUID1, center, dynamicRadiusInCanvas, {
9245
- color,
9246
- });
9247
- }
9214
+ this.applyActiveStrategyCallback(enabledElement, this.getOperationData(viewport.element), _enums__WEBPACK_IMPORTED_MODULE_2__.StrategyCallbacks.RenderCursor, svgDrawingHelper);
9248
9215
  }
9249
9216
  }
9250
9217
  BrushTool.toolName = 'Brush';
@@ -9269,7 +9236,7 @@ BrushTool.toolName = 'Brush';
9269
9236
  /* harmony import */ var _utilities_boundingBox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72282);
9270
9237
  /* harmony import */ var _BrushStrategy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55887);
9271
9238
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29857);
9272
- /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(11990);
9239
+ /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64664);
9273
9240
  /* harmony import */ var _utilities_math_sphere__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(62783);
9274
9241
 
9275
9242
 
@@ -9492,7 +9459,7 @@ function fillOutsideCircle() {
9492
9459
  /* harmony import */ var _utilities_boundingBox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72282);
9493
9460
  /* harmony import */ var _BrushStrategy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55887);
9494
9461
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29857);
9495
- /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(11990);
9462
+ /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64664);
9496
9463
 
9497
9464
 
9498
9465
 
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[1903],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3081],{
3
3
 
4
4
  /***/ 38007:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1659,7 +1659,7 @@ function useViewportSegmentations({
1659
1659
 
1660
1660
  /***/ }),
1661
1661
 
1662
- /***/ 71903:
1662
+ /***/ 63081:
1663
1663
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1664
1664
 
1665
1665
  // ESM COMPAT FLAG
@@ -18844,9 +18844,26 @@ ToolGroupService.REGISTRATION = {
18844
18844
  ;// ../../../extensions/cornerstone/src/services/ToolGroupService/index.js
18845
18845
 
18846
18846
  /* harmony default export */ const services_ToolGroupService = (ToolGroupService);
18847
+ ;// ../../../extensions/cornerstone/src/utils/isAnyDisplaySetCommon.ts
18848
+ /**
18849
+ * Checks whether two viewports share at least one common display set.
18850
+ *
18851
+ * This method checks to see if the source and target share a display set.
18852
+ * It performs an O(n * m) comparison between the display sets of each viewport.
18853
+ * Since each viewport typically contains only a small number of display sets (≤ 5),
18854
+ * the computational cost is negligible.
18855
+ *
18856
+ * @param sourceDisplaySetUIDs - Array of displaySetInstanceUID from the source viewport.
18857
+ * @param targetDisplaySetUIDs - Array of displaySetInstanceUID from the target viewport.
18858
+ * @returns true if at least one display set is common; false otherwise.
18859
+ */
18860
+ function isAnyDisplaySetCommon(sourceDisplaySetUIDs, targetDisplaySetUIDs) {
18861
+ return sourceDisplaySetUIDs.some(uid => targetDisplaySetUIDs.includes(uid));
18862
+ }
18847
18863
  ;// ../../../extensions/cornerstone/src/services/SyncGroupService/createHydrateSegmentationSynchronizer.ts
18848
18864
 
18849
18865
 
18866
+
18850
18867
  const {
18851
18868
  createSynchronizer
18852
18869
  } = dist_esm.SynchronizerManager;
@@ -18870,6 +18887,13 @@ function createHydrateSegmentationSynchronizer(synchronizerName, {
18870
18887
  });
18871
18888
  return stackImageSynchronizer;
18872
18889
  }
18890
+
18891
+ /**
18892
+ * This method will add the segmentation representation to any target viewports having:
18893
+ *
18894
+ * 1. the same FrameOfReferenceUID (FOR) as the segmentation representation, or
18895
+ * 2. a shared DisplaySet with the source viewport when no FOR is present.
18896
+ */
18873
18897
  const segmentationRepresentationModifiedCallback = async (synchronizerInstance, sourceViewport, targetViewport, sourceEvent, {
18874
18898
  servicesManager,
18875
18899
  options
@@ -18880,14 +18904,20 @@ const segmentationRepresentationModifiedCallback = async (synchronizerInstance,
18880
18904
  type: segmentationRepresentationType
18881
18905
  } = event.detail;
18882
18906
  const {
18883
- segmentationService
18907
+ segmentationService,
18908
+ cornerstoneViewportService
18884
18909
  } = servicesManager.services;
18885
18910
  const targetViewportId = targetViewport.viewportId;
18911
+ const sourceViewportId = sourceViewport.viewportId;
18886
18912
  const {
18887
18913
  viewport
18888
18914
  } = (0,esm.getEnabledElementByViewportId)(targetViewportId);
18889
- const targetFrameOfReferenceUID = viewport.getFrameOfReferenceUID();
18890
- if (!targetFrameOfReferenceUID) {
18915
+ const sourceViewportInfo = cornerstoneViewportService.getViewportInfo(sourceViewportId);
18916
+ const targetViewportInfo = cornerstoneViewportService.getViewportInfo(targetViewportId);
18917
+ const sourceDisplaySetUIDs = extractDisplaySetUIDs(sourceViewportInfo);
18918
+ const targetDisplaySetUIDs = extractDisplaySetUIDs(targetViewportInfo);
18919
+ const sharedDisplaySetExists = isAnyDisplaySetCommon(sourceDisplaySetUIDs, targetDisplaySetUIDs);
18920
+ if (!sharedDisplaySetExists && !viewport.getFrameOfReferenceUID()) {
18891
18921
  return;
18892
18922
  }
18893
18923
  const targetViewportRepresentation = segmentationService.getSegmentationRepresentations(targetViewportId, {
@@ -18907,6 +18937,13 @@ const segmentationRepresentationModifiedCallback = async (synchronizerInstance,
18907
18937
  }
18908
18938
  });
18909
18939
  };
18940
+
18941
+ /**
18942
+ * Extracts the displaySetInstanceUIDs from a viewportInfo.
18943
+ */
18944
+ function extractDisplaySetUIDs(viewportInfo) {
18945
+ return viewportInfo.getViewportData().data.map(ds => ds.displaySetInstanceUID);
18946
+ }
18910
18947
  ;// ../../../extensions/cornerstone/src/services/SyncGroupService/SyncGroupService.ts
18911
18948
  var _SyncGroupService;
18912
18949
 
@@ -23608,16 +23645,17 @@ const workerFn = () => {
23608
23645
  name: 'histogram-worker' // name used by the browser to name the worker
23609
23646
  });
23610
23647
  };
23648
+
23649
+ // Register worker once at module load time
23650
+ workerManager.registerWorker('histogram-worker', workerFn, WorkerOptions);
23611
23651
  const getViewportVolumeHistogram = async (viewport, volume, options) => {
23612
- workerManager.registerWorker('histogram-worker', workerFn, WorkerOptions);
23613
23652
  const volumeImageData = viewport.getImageData(volume.volumeId);
23614
23653
  if (!volumeImageData) {
23615
23654
  return undefined;
23616
23655
  }
23617
23656
  let scalarData = volume.scalarData;
23618
23657
  if (volume.numTimePoints > 1) {
23619
- const targetTimePoint = volume.numTimePoints - 1; // or any other time point you need
23620
- scalarData = volume.voxelManager.getTimePointScalarData(targetTimePoint);
23658
+ scalarData = volume.voxelManager.getDimensionGroupScalarData(volume.numTimePoints);
23621
23659
  } else {
23622
23660
  scalarData = volume.voxelManager.getCompleteScalarDataArray();
23623
23661
  }
@@ -23666,6 +23704,9 @@ const getViewportVolumeHistogram = async (viewport, volume, options) => {
23666
23704
  * Gets node opacity from volume actor
23667
23705
  */
23668
23706
  const getNodeOpacity = (volumeActor, nodeIndex) => {
23707
+ if (!volumeActor) {
23708
+ return undefined;
23709
+ }
23669
23710
  const volumeOpacity = volumeActor.getProperty().getScalarOpacity(0);
23670
23711
  const nodeValue = [];
23671
23712
  volumeOpacity.getNodeValue(nodeIndex, nodeValue);
@@ -23676,6 +23717,9 @@ const getNodeOpacity = (volumeActor, nodeIndex) => {
23676
23717
  * Checks if the opacity applied to the PET volume follows a specific pattern
23677
23718
  */
23678
23719
  const isPetVolumeWithDefaultOpacity = (volumeId, volumeActor) => {
23720
+ if (!volumeActor) {
23721
+ return false;
23722
+ }
23679
23723
  const volume = esm.cache.getVolume(volumeId);
23680
23724
  if (!volume || volume.metadata.Modality !== 'PT') {
23681
23725
  return false;
@@ -23707,6 +23751,9 @@ const isPetVolumeWithDefaultOpacity = (volumeId, volumeActor) => {
23707
23751
  * Checks if volume has constant opacity
23708
23752
  */
23709
23753
  const isVolumeWithConstantOpacity = volumeActor => {
23754
+ if (!volumeActor) {
23755
+ return false;
23756
+ }
23710
23757
  const volumeOpacity = volumeActor.getProperty().getScalarOpacity(0);
23711
23758
  const opacitySize = volumeOpacity.getSize();
23712
23759
  const firstNodeValue = [];
@@ -23733,7 +23780,7 @@ const getWindowLevelsData = async (viewport, viewportInfo, getVolumeOpacity) =>
23733
23780
  const viewportProperties = viewport.getProperties();
23734
23781
  const {
23735
23782
  voiRange
23736
- } = viewportProperties;
23783
+ } = viewportProperties || {};
23737
23784
  const viewportVoi = voiRange ? {
23738
23785
  windowWidth: voiRange.upper - voiRange.lower,
23739
23786
  windowCenter: voiRange.lower + (voiRange.upper - voiRange.lower) / 2
@@ -109,6 +109,8 @@ var SegmentationRepresentations;
109
109
  /* harmony export */ });
110
110
  var StrategyCallbacks;
111
111
  (function (StrategyCallbacks) {
112
+ StrategyCallbacks["CalculateCursorGeometry"] = "calculateCursorGeometry";
113
+ StrategyCallbacks["RenderCursor"] = "renderCursor";
112
114
  StrategyCallbacks["OnInteractionStart"] = "onInteractionStart";
113
115
  StrategyCallbacks["OnInteractionEnd"] = "onInteractionEnd";
114
116
  StrategyCallbacks["Preview"] = "preview";