@ohif/app 3.12.0-beta.105 → 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 (41) hide show
  1. package/dist/{1403.bundle.e558236251c496bf5b87.js → 1403.bundle.b45c67c19dabf9c62ead.js} +2 -0
  2. package/dist/{1730.bundle.09b8dafc3f9bde8e3c4f.js → 1730.bundle.c9e0d9f751d8b24cfbe2.js} +2 -0
  3. package/dist/{1927.bundle.019331c266d306772371.js → 1927.bundle.3050588e95f43cf57cdd.js} +1 -1
  4. package/dist/{2842.bundle.7852a204d3510fca8b27.js → 2842.bundle.72b8e407027b26a34584.js} +68 -101
  5. package/dist/{3081.bundle.192e10961178ac5077cc.js → 3081.bundle.71a2f4b2706114346d67.js} +14 -4
  6. package/dist/{3343.bundle.f8fe9316b0ff68d087f7.js → 3343.bundle.d7578ce8f75d158c0bab.js} +2 -0
  7. package/dist/{3353.bundle.a0f1654c642395bbbbbc.js → 3353.bundle.7d5f628fe7eb8fe738ce.js} +146 -144
  8. package/dist/{4019.bundle.01f63d5dd5b96ded0c00.js → 4019.bundle.cdb81fb4777792f6175d.js} +132 -10
  9. package/dist/{4775.bundle.16fc2ed5bd3c9fc90001.js → 4775.bundle.cc7c126b04c9c6214d9f.js} +2 -0
  10. package/dist/{5400.bundle.de97508611da1c00d58a.js → 5400.bundle.be4bdac337da734fdcd3.js} +1 -0
  11. package/dist/{5448.bundle.9a36e001169ea3bfeb6c.js → 5448.bundle.2a82fcfac24d62355154.js} +22 -6
  12. package/dist/{5462.bundle.a81a691eeef782ab95b9.js → 5462.bundle.21beddaca145b7465c72.js} +2 -0
  13. package/dist/{5549.bundle.d5def6a3124a3a481b7c.js → 5549.bundle.4d086f8682a317140e65.js} +159 -155
  14. package/dist/{6163.bundle.8145a6c7394d0ffa60f4.js → 6163.bundle.e0d7dbf2a795589d1ba0.js} +2 -0
  15. package/dist/{7412.bundle.aec4834a71fc27c4ce06.js → 7412.bundle.7b062eda3b01de135817.js} +119 -151
  16. package/dist/{7639.bundle.ff51bb4280f3d33869fd.js → 7639.bundle.096a5aaabaff706ab769.js} +9 -5
  17. package/dist/{8558.bundle.5d584fd9fb1bcb89ea93.js → 8558.bundle.0fd075bf5ebda9511e73.js} +2 -0
  18. package/dist/{9195.bundle.3f97c0156c3da14e62c8.js → 9195.bundle.6663852fdc83058f3686.js} +2 -2
  19. package/dist/app.bundle.css +1 -1
  20. package/dist/{app.bundle.afb8f18ed44df91b4ea6.js → app.bundle.faddb2bd6978a85105c6.js} +66 -15
  21. package/dist/{compute.bundle.fdee4a0f193ee2e1b6da.js → compute.bundle.6f1bd84d7c7116ff82a4.js} +1 -1
  22. package/dist/index.html +1 -1
  23. package/dist/{polySeg.bundle.11f9746cd60c9811a412.js → polySeg.bundle.d4bcf15986821b88dec9.js} +1 -1
  24. package/dist/sw.js +1 -1
  25. package/package.json +21 -21
  26. /package/dist/{1459.bundle.ce2fcc7f893b66723c0a.js → 1459.bundle.93b2412d40d25b566a2c.js} +0 -0
  27. /package/dist/{1933.bundle.373e04f9eebb70186ae1.js → 1933.bundle.a5eb66b39be97a7c6e1e.js} +0 -0
  28. /package/dist/{2018.bundle.d6b41648adeda2be5e42.js → 2018.bundle.17a0d310b03d6dbab3e4.js} +0 -0
  29. /package/dist/{213.bundle.a856837fe85a0c3d80fa.js → 213.bundle.8e5031f961dbbf058e5d.js} +0 -0
  30. /package/dist/{2424.bundle.170efb7c5fe559d8155f.js → 2424.bundle.55a38e540e3ac2db94d5.js} +0 -0
  31. /package/dist/{3461.bundle.02c3e5d65610076cee3e.js → 3461.bundle.84ff305e012481a9ded5.js} +0 -0
  32. /package/dist/{4819.bundle.2a36c7376610495e0618.js → 4819.bundle.ce13d222206c192b78f8.js} +0 -0
  33. /package/dist/{5028.bundle.3d86226f1245834bcb9a.js → 5028.bundle.d011dac918b575c5472a.js} +0 -0
  34. /package/dist/{5457.bundle.14acfe3d1f3c03d37036.js → 5457.bundle.5357429ada1334292c6a.js} +0 -0
  35. /package/dist/{5485.bundle.b840c31f59f0e661efa3.js → 5485.bundle.52d28268e556576dd215.js} +0 -0
  36. /package/dist/{5858.bundle.d5f4bf849aaeebf5025c.js → 5858.bundle.ff6b340cf7457db76a1a.js} +0 -0
  37. /package/dist/{6027.bundle.090813925edfa95aaabe.js → 6027.bundle.4cb3d089c1bec23076d7.js} +0 -0
  38. /package/dist/{8305.bundle.ab84f3246234aa0e4a8e.js → 8305.bundle.b4a98270e518f46feaa0.js} +0 -0
  39. /package/dist/{85.bundle.a3e030a8efe2c1061025.js → 85.bundle.9855c5d5c7602012d954.js} +0 -0
  40. /package/dist/{8583.bundle.659f3cf4b4c64a985dd8.js → 8583.bundle.7534fbaf03a232fd85c5.js} +0 -0
  41. /package/dist/{9927.bundle.f6af980e75c32a8bfd93.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";
@@ -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";
@@ -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
  /******/
@@ -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
 
@@ -23645,16 +23645,17 @@ const workerFn = () => {
23645
23645
  name: 'histogram-worker' // name used by the browser to name the worker
23646
23646
  });
23647
23647
  };
23648
+
23649
+ // Register worker once at module load time
23650
+ workerManager.registerWorker('histogram-worker', workerFn, WorkerOptions);
23648
23651
  const getViewportVolumeHistogram = async (viewport, volume, options) => {
23649
- workerManager.registerWorker('histogram-worker', workerFn, WorkerOptions);
23650
23652
  const volumeImageData = viewport.getImageData(volume.volumeId);
23651
23653
  if (!volumeImageData) {
23652
23654
  return undefined;
23653
23655
  }
23654
23656
  let scalarData = volume.scalarData;
23655
23657
  if (volume.numTimePoints > 1) {
23656
- const targetTimePoint = volume.numTimePoints - 1; // or any other time point you need
23657
- scalarData = volume.voxelManager.getTimePointScalarData(targetTimePoint);
23658
+ scalarData = volume.voxelManager.getDimensionGroupScalarData(volume.numTimePoints);
23658
23659
  } else {
23659
23660
  scalarData = volume.voxelManager.getCompleteScalarDataArray();
23660
23661
  }
@@ -23703,6 +23704,9 @@ const getViewportVolumeHistogram = async (viewport, volume, options) => {
23703
23704
  * Gets node opacity from volume actor
23704
23705
  */
23705
23706
  const getNodeOpacity = (volumeActor, nodeIndex) => {
23707
+ if (!volumeActor) {
23708
+ return undefined;
23709
+ }
23706
23710
  const volumeOpacity = volumeActor.getProperty().getScalarOpacity(0);
23707
23711
  const nodeValue = [];
23708
23712
  volumeOpacity.getNodeValue(nodeIndex, nodeValue);
@@ -23713,6 +23717,9 @@ const getNodeOpacity = (volumeActor, nodeIndex) => {
23713
23717
  * Checks if the opacity applied to the PET volume follows a specific pattern
23714
23718
  */
23715
23719
  const isPetVolumeWithDefaultOpacity = (volumeId, volumeActor) => {
23720
+ if (!volumeActor) {
23721
+ return false;
23722
+ }
23716
23723
  const volume = esm.cache.getVolume(volumeId);
23717
23724
  if (!volume || volume.metadata.Modality !== 'PT') {
23718
23725
  return false;
@@ -23744,6 +23751,9 @@ const isPetVolumeWithDefaultOpacity = (volumeId, volumeActor) => {
23744
23751
  * Checks if volume has constant opacity
23745
23752
  */
23746
23753
  const isVolumeWithConstantOpacity = volumeActor => {
23754
+ if (!volumeActor) {
23755
+ return false;
23756
+ }
23747
23757
  const volumeOpacity = volumeActor.getProperty().getScalarOpacity(0);
23748
23758
  const opacitySize = volumeOpacity.getSize();
23749
23759
  const firstNodeValue = [];
@@ -23770,7 +23780,7 @@ const getWindowLevelsData = async (viewport, viewportInfo, getVolumeOpacity) =>
23770
23780
  const viewportProperties = viewport.getProperties();
23771
23781
  const {
23772
23782
  voiRange
23773
- } = viewportProperties;
23783
+ } = viewportProperties || {};
23774
23784
  const viewportVoi = voiRange ? {
23775
23785
  windowWidth: voiRange.upper - voiRange.lower,
23776
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";