@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
@@ -2092,8 +2092,40 @@ function buildMetadata(image) {
2092
2092
 
2093
2093
 
2094
2094
 
2095
+ const DEFAULT_THICKNESS_SINGLE_SLICE = 1;
2096
+ function getPixelSpacingForCubicVoxel(metadata) {
2097
+ if (metadata.columnPixelSpacing !== undefined) {
2098
+ return metadata.columnPixelSpacing;
2099
+ }
2100
+ if (metadata.rowPixelSpacing !== undefined) {
2101
+ return metadata.rowPixelSpacing;
2102
+ }
2103
+ if (metadata.pixelSpacing?.[1] !== undefined) {
2104
+ return metadata.pixelSpacing[1];
2105
+ }
2106
+ if (metadata.pixelSpacing?.[0] !== undefined) {
2107
+ return metadata.pixelSpacing[0];
2108
+ }
2109
+ return undefined;
2110
+ }
2095
2111
  function calculateSpacingBetweenImageIds(imageIds) {
2096
2112
  const { imagePositionPatient: referenceImagePositionPatient, imageOrientationPatient, } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2113
+ if (imageIds.length === 1) {
2114
+ const { sliceThickness, spacingBetweenSlices, columnPixelSpacing, rowPixelSpacing, pixelSpacing, } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2115
+ if (sliceThickness)
2116
+ return sliceThickness;
2117
+ if (spacingBetweenSlices)
2118
+ return spacingBetweenSlices;
2119
+ const pixelSpacingValue = getPixelSpacingForCubicVoxel({
2120
+ columnPixelSpacing,
2121
+ rowPixelSpacing,
2122
+ pixelSpacing,
2123
+ });
2124
+ if (pixelSpacingValue !== undefined) {
2125
+ return pixelSpacingValue;
2126
+ }
2127
+ return DEFAULT_THICKNESS_SINGLE_SLICE;
2128
+ }
2097
2129
  const rowCosineVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(imageOrientationPatient[0], imageOrientationPatient[1], imageOrientationPatient[2]);
2098
2130
  const colCosineVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(imageOrientationPatient[3], imageOrientationPatient[4], imageOrientationPatient[5]);
2099
2131
  const scanAxisNormal = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
@@ -2128,8 +2160,6 @@ function calculateSpacingBetweenImageIds(imageIds) {
2128
2160
  imageIds[0],
2129
2161
  imageIds[Math.floor(imageIds.length / 2)],
2130
2162
  ];
2131
- const firstImageDistance = getDistance(prefetchedImageIds[0]);
2132
- const middleImageDistance = getDistance(prefetchedImageIds[1]);
2133
2163
  const metadataForMiddleImage = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', prefetchedImageIds[1]);
2134
2164
  if (!metadataForMiddleImage) {
2135
2165
  throw new Error('Incomplete metadata required for volume construction.');
@@ -2142,7 +2172,7 @@ function calculateSpacingBetweenImageIds(imageIds) {
2142
2172
  Math.abs(distanceBetweenFirstAndMiddleImages) /
2143
2173
  Math.floor(imageIds.length / 2);
2144
2174
  }
2145
- const { sliceThickness, spacingBetweenSlices } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2175
+ const { sliceThickness, spacingBetweenSlices, columnPixelSpacing, rowPixelSpacing, pixelSpacing, } = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('imagePlaneModule', imageIds[0]);
2146
2176
  const { strictZSpacingForVolumeViewport } = (0,_init__WEBPACK_IMPORTED_MODULE_2__/* .getConfiguration */ .D0)().rendering;
2147
2177
  if ((spacing === 0 || isNaN(spacing)) && !strictZSpacingForVolumeViewport) {
2148
2178
  if (spacingBetweenSlices) {
@@ -2154,8 +2184,18 @@ function calculateSpacingBetweenImageIds(imageIds) {
2154
2184
  spacing = sliceThickness;
2155
2185
  }
2156
2186
  else {
2157
- console.debug('Could not calculate spacing. The VolumeViewport visualization is compromised. Setting spacing to 1 to render');
2158
- spacing = 1;
2187
+ const pixelSpacingValue = getPixelSpacingForCubicVoxel({
2188
+ columnPixelSpacing,
2189
+ rowPixelSpacing,
2190
+ pixelSpacing,
2191
+ });
2192
+ if (pixelSpacingValue) {
2193
+ spacing = pixelSpacingValue;
2194
+ }
2195
+ else {
2196
+ console.debug(`Could not calculate spacing and no pixel spacing found. Using default thickness (${DEFAULT_THICKNESS_SINGLE_SLICE} mm)`);
2197
+ spacing = DEFAULT_THICKNESS_SINGLE_SLICE;
2198
+ }
2159
2199
  }
2160
2200
  }
2161
2201
  return spacing;
@@ -4339,7 +4379,7 @@ var isEqual = __webpack_require__(74638);
4339
4379
 
4340
4380
 
4341
4381
  function isValidVolume(imageIds) {
4342
- if (imageIds.length <= 1) {
4382
+ if (!imageIds.length) {
4343
4383
  return false;
4344
4384
  }
4345
4385
  const imageId0 = imageIds[0];
@@ -4937,6 +4977,8 @@ function scroll_scroll(viewport, options) {
4937
4977
  function scrollVolume(viewport, volumeId, delta, scrollSlabs = false) {
4938
4978
  const useSlabThickness = scrollSlabs;
4939
4979
  const { numScrollSteps, currentStepIndex, sliceRangeInfo } = (0,getVolumeViewportScrollInfo/* default */.A)(viewport, volumeId, useSlabThickness);
4980
+ if (numScrollSteps === 0)
4981
+ return;
4940
4982
  if (!sliceRangeInfo) {
4941
4983
  return;
4942
4984
  }
@@ -6933,7 +6975,7 @@ var COLOR_LUT = __webpack_require__(93952);
6933
6975
 
6934
6976
 
6935
6977
  ;// ../../../node_modules/@cornerstonejs/tools/dist/esm/version.js
6936
- const version = '4.12.6';
6978
+ const version = '4.14.4';
6937
6979
 
6938
6980
  ;// ../../../node_modules/@cornerstonejs/tools/dist/esm/synchronizers/callbacks/cameraSyncCallback.js
6939
6981
 
@@ -10434,6 +10476,9 @@ class PanTool extends base/* BaseTool */.oS {
10434
10476
  supportedInteractionTypes: ['Mouse', 'Touch'],
10435
10477
  configuration: {
10436
10478
  limitToViewport: false,
10479
+ ignoreX: false,
10480
+ ignoreY: false,
10481
+ ignoreZ: false
10437
10482
  },
10438
10483
  }) {
10439
10484
  super(toolProps, defaultToolProps);
@@ -10508,6 +10553,15 @@ class PanTool extends base/* BaseTool */.oS {
10508
10553
  deltaPointsWorld[2] === 0) {
10509
10554
  return;
10510
10555
  }
10556
+ if (this.configuration.ignoreX) {
10557
+ deltaPointsWorld[0] = 0;
10558
+ }
10559
+ if (this.configuration.ignoreY) {
10560
+ deltaPointsWorld[1] = 0;
10561
+ }
10562
+ if (this.configuration.ignoreZ) {
10563
+ deltaPointsWorld[2] = 0;
10564
+ }
10511
10565
  const viewport = enabledElement.viewport;
10512
10566
  const camera = viewport.getCamera();
10513
10567
  const { focalPoint, position } = camera;
@@ -15686,7 +15740,7 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15686
15740
  const canvasPos = currentPoints.canvas;
15687
15741
  const { magnifyingGlass: config } = this.configuration;
15688
15742
  const { radius, zoomFactor, autoPan } = config;
15689
- const canvasHandlePoints = this._getCanvasHandlePoints(canvasPos, radius);
15743
+ const worldHandlePoints = this._getWorldHandlePoints(viewport, canvasPos, radius);
15690
15744
  const camera = viewport.getCamera();
15691
15745
  const { viewPlaneNormal, viewUp } = camera;
15692
15746
  const referencedImageId = this.getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp);
@@ -15708,9 +15762,9 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15708
15762
  sourceViewportId: viewport.id,
15709
15763
  magnifyViewportId,
15710
15764
  zoomFactor,
15711
- isCanvasAnnotation: true,
15765
+ isCanvasAnnotation: false,
15712
15766
  handles: {
15713
- points: canvasHandlePoints,
15767
+ points: worldHandlePoints,
15714
15768
  activeHandleIndex: null,
15715
15769
  },
15716
15770
  },
@@ -15726,13 +15780,14 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15726
15780
  padding: autoPan.padding,
15727
15781
  callback: (data) => {
15728
15782
  const annotationPoints = annotation.data.handles.points;
15729
- const { canvas: canvasDelta } = data.delta;
15783
+ const { world: worldDelta } = data.delta;
15730
15784
  for (let i = 0, len = annotationPoints.length; i < len; i++) {
15731
15785
  const point = annotationPoints[i];
15732
- point[0] += canvasDelta[0];
15733
- point[1] += canvasDelta[1];
15734
- annotation.invalidated = true;
15786
+ point[0] += worldDelta[0];
15787
+ point[1] += worldDelta[1];
15788
+ point[2] += worldDelta[2];
15735
15789
  }
15790
+ annotation.invalidated = true;
15736
15791
  },
15737
15792
  },
15738
15793
  });
@@ -15752,17 +15807,9 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15752
15807
  });
15753
15808
  };
15754
15809
  this.isPointNearTool = (element, annotation, canvasCoords, proximity) => {
15755
- const { data } = annotation;
15756
- const { points } = data.handles;
15757
- const canvasCoordinates = points;
15758
- const canvasTop = canvasCoordinates[0];
15759
- const canvasBottom = canvasCoordinates[2];
15760
- const canvasLeft = canvasCoordinates[3];
15761
- const radius = Math.abs(canvasBottom[1] - canvasTop[1]) * 0.5;
15762
- const center = [
15763
- canvasLeft[0] + radius,
15764
- canvasTop[1] + radius,
15765
- ];
15810
+ const { viewport } = (0,esm.getEnabledElement)(element);
15811
+ const { points } = annotation.data.handles;
15812
+ const { radius, center } = this._getCanvasCircleData(viewport, points);
15766
15813
  const radiusPoint = (0,circle.getCanvasCircleRadius)([center, canvasCoords]);
15767
15814
  if (Math.abs(radiusPoint - radius) < proximity * 2) {
15768
15815
  return true;
@@ -15819,14 +15866,14 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15819
15866
  this._dragDrawCallback = (evt) => {
15820
15867
  this.isDrawing = true;
15821
15868
  const eventDetail = evt.detail;
15869
+ const { element } = eventDetail;
15870
+ const { viewport } = (0,esm.getEnabledElement)(element);
15822
15871
  const { deltaPoints } = eventDetail;
15823
15872
  const canvasDelta = deltaPoints?.canvas ?? [0, 0, 0];
15824
15873
  const { annotation, viewportIdsToRender } = this.editData;
15825
15874
  const { points } = annotation.data.handles;
15826
- points.forEach((point) => {
15827
- point[0] += canvasDelta[0];
15828
- point[1] += canvasDelta[1];
15829
- });
15875
+ const worldDelta = this._getWorldDeltaFromCanvasDelta(viewport, points, canvasDelta);
15876
+ this._applyWorldDelta(points, worldDelta);
15830
15877
  annotation.invalidated = true;
15831
15878
  this.editData.hasMoved = true;
15832
15879
  (0,triggerAnnotationRenderForViewportIds/* default */.A)(viewportIdsToRender);
@@ -15839,12 +15886,10 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15839
15886
  const { data } = annotation;
15840
15887
  if (handleIndex === undefined) {
15841
15888
  const { deltaPoints } = eventDetail;
15842
- const canvasDelta = deltaPoints.canvas;
15889
+ const canvasDelta = deltaPoints.canvas ?? [0, 0, 0];
15843
15890
  const points = data.handles.points;
15844
- points.forEach((point) => {
15845
- point[0] += canvasDelta[0];
15846
- point[1] += canvasDelta[1];
15847
- });
15891
+ const worldDelta = this._getWorldDeltaFromCanvasDelta((0,esm.getEnabledElement)(element).viewport, points, canvasDelta);
15892
+ this._applyWorldDelta(points, worldDelta);
15848
15893
  annotation.invalidated = true;
15849
15894
  }
15850
15895
  else {
@@ -15855,18 +15900,12 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15855
15900
  };
15856
15901
  this._dragHandle = (evt) => {
15857
15902
  const eventDetail = evt.detail;
15903
+ const { element } = eventDetail;
15904
+ const { viewport } = (0,esm.getEnabledElement)(element);
15858
15905
  const { annotation } = this.editData;
15859
15906
  const { data } = annotation;
15860
15907
  const { points } = data.handles;
15861
- const canvasCoordinates = points;
15862
- const canvasTop = canvasCoordinates[0];
15863
- const canvasBottom = canvasCoordinates[2];
15864
- const canvasLeft = canvasCoordinates[3];
15865
- const radius = Math.abs(canvasBottom[1] - canvasTop[1]) * 0.5;
15866
- const canvasCenter = [
15867
- canvasLeft[0] + radius,
15868
- canvasTop[1] + radius,
15869
- ];
15908
+ const { center: canvasCenter } = this._getCanvasCircleData(viewport, points);
15870
15909
  const { currentPoints } = eventDetail;
15871
15910
  const currentCanvasPoints = currentPoints.canvas;
15872
15911
  const newRadius = (0,circle.getCanvasCircleRadius)([
@@ -15874,10 +15913,11 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15874
15913
  currentCanvasPoints,
15875
15914
  ]);
15876
15915
  const newCanvasHandlePoints = this._getCanvasHandlePoints(canvasCenter, newRadius);
15877
- points[0] = newCanvasHandlePoints[0];
15878
- points[1] = newCanvasHandlePoints[1];
15879
- points[2] = newCanvasHandlePoints[2];
15880
- points[3] = newCanvasHandlePoints[3];
15916
+ const newWorldHandlePoints = newCanvasHandlePoints.map((handle) => viewport.canvasToWorld(handle));
15917
+ points[0] = newWorldHandlePoints[0];
15918
+ points[1] = newWorldHandlePoints[1];
15919
+ points[2] = newWorldHandlePoints[2];
15920
+ points[3] = newWorldHandlePoints[3];
15881
15921
  };
15882
15922
  this.cancel = (element) => {
15883
15923
  if (!this.isDrawing) {
@@ -15939,19 +15979,11 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15939
15979
  const { annotationUID, data } = annotation;
15940
15980
  const { magnifyViewportId, zoomFactor, handles } = data;
15941
15981
  const { points, activeHandleIndex } = handles;
15982
+ const { center, radius, canvasPoints } = this._getCanvasCircleData(viewport, points);
15942
15983
  styleSpecifier.annotationUID = annotationUID;
15943
15984
  const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
15944
15985
  const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
15945
15986
  const color = this.getStyle('color', styleSpecifier, annotation);
15946
- const canvasCoordinates = points;
15947
- const canvasTop = canvasCoordinates[0];
15948
- const canvasBottom = canvasCoordinates[2];
15949
- const canvasLeft = canvasCoordinates[3];
15950
- const radius = Math.abs(canvasBottom[1] - canvasTop[1]) * 0.5;
15951
- const center = [
15952
- canvasLeft[0] + radius,
15953
- canvasTop[1] + radius,
15954
- ];
15955
15987
  if (!viewport.getRenderingEngine()) {
15956
15988
  console.warn('Rendering Engine has been destroyed');
15957
15989
  return renderStatus;
@@ -15963,7 +15995,10 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15963
15995
  if (!(0,annotationLocking.isAnnotationLocked)(annotationUID) &&
15964
15996
  !this.editData &&
15965
15997
  activeHandleIndex !== null) {
15966
- activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
15998
+ const activeHandle = canvasPoints[activeHandleIndex];
15999
+ activeHandleCanvasCoords = [
16000
+ [activeHandle[0], activeHandle[1], 0],
16001
+ ];
15967
16002
  }
15968
16003
  if (activeHandleCanvasCoords) {
15969
16004
  const handleGroupUID = '0';
@@ -15986,6 +16021,22 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
15986
16021
  }
15987
16022
  return renderStatus;
15988
16023
  };
16024
+ this._getWorldHandlePoints = (viewport, canvasCenterPos, canvasRadius) => {
16025
+ const canvasHandlePoints = this._getCanvasHandlePoints(canvasCenterPos, canvasRadius);
16026
+ return canvasHandlePoints.map((handlePoint) => viewport.canvasToWorld(handlePoint));
16027
+ };
16028
+ this._getCanvasCircleData = (viewport, points) => {
16029
+ const canvasPoints = points.map((point) => viewport.worldToCanvas(point));
16030
+ const canvasTop = canvasPoints[0];
16031
+ const canvasBottom = canvasPoints[2];
16032
+ const canvasLeft = canvasPoints[3];
16033
+ const radius = Math.abs(canvasBottom[1] - canvasTop[1]) * 0.5;
16034
+ const center = [
16035
+ canvasLeft[0] + radius,
16036
+ canvasTop[1] + radius,
16037
+ ];
16038
+ return { canvasPoints, center, radius };
16039
+ };
15989
16040
  this._getCanvasHandlePoints = (canvasCenterPos, canvasRadius) => {
15990
16041
  return [
15991
16042
  [canvasCenterPos[0], canvasCenterPos[1] - canvasRadius, 0],
@@ -16052,6 +16103,33 @@ class AdvancedMagnifyTool extends base/* AnnotationTool */.EC {
16052
16103
  });
16053
16104
  return dropdown;
16054
16105
  }
16106
+ _getWorldDeltaFromCanvasDelta(viewport, points, canvasDelta) {
16107
+ if (!canvasDelta) {
16108
+ return [0, 0, 0];
16109
+ }
16110
+ const referencePoint = points[0];
16111
+ const referenceCanvasPoint = viewport.worldToCanvas(referencePoint);
16112
+ const movedWorldPoint = viewport.canvasToWorld([
16113
+ referenceCanvasPoint[0] + canvasDelta[0],
16114
+ referenceCanvasPoint[1] + canvasDelta[1],
16115
+ ]);
16116
+ return [
16117
+ movedWorldPoint[0] - referencePoint[0],
16118
+ movedWorldPoint[1] - referencePoint[1],
16119
+ movedWorldPoint[2] - referencePoint[2],
16120
+ ];
16121
+ }
16122
+ _applyWorldDelta(points, worldDelta) {
16123
+ if (!worldDelta) {
16124
+ return;
16125
+ }
16126
+ for (let i = 0, len = points.length; i < len; i++) {
16127
+ const point = points[i];
16128
+ point[0] += worldDelta[0];
16129
+ point[1] += worldDelta[1];
16130
+ point[2] += worldDelta[2];
16131
+ }
16132
+ }
16055
16133
  }
16056
16134
  class AdvancedMagnifyViewportManager {
16057
16135
  constructor() {
@@ -17484,7 +17562,7 @@ class ScaleOverlayTool extends AnnotationDisplayTool/* default */.A {
17484
17562
  let annotation = this.editData?.annotation;
17485
17563
  const annotations = (0,annotationState.getAnnotations)(this.getToolName(), viewport.element);
17486
17564
  if (annotations.length) {
17487
- annotation = annotations.filter((thisAnnotation) => thisAnnotation.data.viewportId == viewport.id)[0];
17565
+ annotation = annotations.filter((thisAnnotation) => thisAnnotation.data?.viewportId == viewport.id)[0];
17488
17566
  }
17489
17567
  enabledElements.forEach((element) => {
17490
17568
  const { viewport } = element;
@@ -17730,10 +17808,10 @@ class ScaleOverlayTool extends AnnotationDisplayTool/* default */.A {
17730
17808
  const location = this.configuration.scaleLocation;
17731
17809
  const { viewport } = enabledElement;
17732
17810
  const annotations = (0,annotationState.getAnnotations)(this.getToolName(), viewport.element);
17733
- const annotation = annotations.filter((thisAnnotation) => thisAnnotation.data.viewportId == viewport.id)[0];
17811
+ const annotation = annotations.filter((thisAnnotation) => thisAnnotation.data?.viewportId == viewport.id)[0];
17734
17812
  const canvas = enabledElement.viewport.canvas;
17735
17813
  const renderStatus = false;
17736
- if (!viewport) {
17814
+ if (!viewport || !annotation) {
17737
17815
  return renderStatus;
17738
17816
  }
17739
17817
  const styleSpecifier = {
@@ -36791,12 +36869,10 @@ function defaultGetTextLines(data, targetId) {
36791
36869
  /* harmony import */ var _strategies_eraseSphere__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1989);
36792
36870
  /* harmony import */ var _strategies_fillCircle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(56789);
36793
36871
  /* harmony import */ var _strategies_eraseCircle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(33852);
36794
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74347);
36795
- /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7001);
36796
- /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(58640);
36797
- /* harmony import */ var _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(23631);
36798
- /* harmony import */ var _strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(40905);
36799
-
36872
+ /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7001);
36873
+ /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(58640);
36874
+ /* harmony import */ var _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(23631);
36875
+ /* harmony import */ var _strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(40905);
36800
36876
 
36801
36877
 
36802
36878
 
@@ -36808,7 +36884,7 @@ function defaultGetTextLines(data, targetId) {
36808
36884
 
36809
36885
 
36810
36886
 
36811
- class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A {
36887
+ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A {
36812
36888
  constructor(toolProps = {}, defaultToolProps = {
36813
36889
  supportedInteractionTypes: ['Mouse', 'Touch'],
36814
36890
  configuration: {
@@ -36895,7 +36971,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
36895
36971
  const { viewport } = enabledElement;
36896
36972
  this._editData = this.createEditData(element);
36897
36973
  this._activateDraw(element);
36898
- (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.hideElementCursor)(element);
36974
+ (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__.hideElementCursor)(element);
36899
36975
  evt.preventDefault();
36900
36976
  this._previewData.isDrag = false;
36901
36977
  this._previewData.timerStart = Date.now();
@@ -36909,7 +36985,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
36909
36985
  world: gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(worldPoint),
36910
36986
  };
36911
36987
  const hoverData = this._hoverData || this.createHoverData(element);
36912
- (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(hoverData.viewportIdsToRender);
36988
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(hoverData.viewportIdsToRender);
36913
36989
  const operationData = this.getOperationData(element);
36914
36990
  if (!operationData) {
36915
36991
  return false;
@@ -36918,6 +36994,9 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
36918
36994
  return true;
36919
36995
  };
36920
36996
  this.mouseMoveCallback = (evt) => {
36997
+ if (!this.isPrimary) {
36998
+ return;
36999
+ }
36921
37000
  if (this.mode === _enums__WEBPACK_IMPORTED_MODULE_2__.ToolModes.Active) {
36922
37001
  this.updateCursor(evt);
36923
37002
  if (!this.configuration.preview.enabled) {
@@ -36966,7 +37045,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
36966
37045
  }
36967
37046
  const { viewport } = enabledElement;
36968
37047
  const activeStrategy = this.configuration.activeStrategy;
36969
- const strategyData = (0,_strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_11__/* .getStrategyData */ .S)({
37048
+ const strategyData = (0,_strategies_utils_getStrategyData__WEBPACK_IMPORTED_MODULE_10__/* .getStrategyData */ .S)({
36970
37049
  operationData,
36971
37050
  viewport,
36972
37051
  strategy: activeStrategy,
@@ -36988,7 +37067,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
36988
37067
  const { viewport } = enabledElement;
36989
37068
  this.updateCursor(evt);
36990
37069
  const { viewportIdsToRender } = this._hoverData;
36991
- (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(viewportIdsToRender);
37070
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(viewportIdsToRender);
36992
37071
  const delta = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec2.distance */ .Zc.distance(currentPoints.canvas, this._previewData.startPoint);
36993
37072
  const { dragTimeMs, dragMoveDistance } = this.configuration.preview;
36994
37073
  if (!this._previewData.isDrag &&
@@ -37050,7 +37129,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
37050
37129
  }
37051
37130
  this.doneEditMemo();
37052
37131
  this._deactivateDraw(element);
37053
- (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.resetElementCursor)(element);
37132
+ (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__.resetElementCursor)(element);
37054
37133
  this.updateCursor(evt);
37055
37134
  this._editData = null;
37056
37135
  this._lastDragInfo = null;
@@ -37084,55 +37163,12 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
37084
37163
  if (!this._hoverData) {
37085
37164
  return;
37086
37165
  }
37087
- (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(this._hoverData.viewportIdsToRender);
37166
+ BrushTool.activeCursorTool = this;
37167
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(this._hoverData.viewportIdsToRender);
37088
37168
  }
37089
37169
  _calculateCursor(element, centerCanvas) {
37090
37170
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElement)(element);
37091
- const { viewport } = enabledElement;
37092
- const { canvasToWorld } = viewport;
37093
- const camera = viewport.getCamera();
37094
- const { brushSize } = this.configuration;
37095
- const viewUp = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.fromValues */ .eR.fromValues(camera.viewUp[0], camera.viewUp[1], camera.viewUp[2]);
37096
- const viewPlaneNormal = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.fromValues */ .eR.fromValues(camera.viewPlaneNormal[0], camera.viewPlaneNormal[1], camera.viewPlaneNormal[2]);
37097
- const viewRight = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
37098
- gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.cross */ .eR.cross(viewRight, viewUp, viewPlaneNormal);
37099
- const centerCursorInWorld = canvasToWorld([
37100
- centerCanvas[0],
37101
- centerCanvas[1],
37102
- ]);
37103
- const bottomCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
37104
- const topCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
37105
- const leftCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
37106
- const rightCursorInWorld = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
37107
- for (let i = 0; i <= 2; i++) {
37108
- bottomCursorInWorld[i] = centerCursorInWorld[i] - viewUp[i] * brushSize;
37109
- topCursorInWorld[i] = centerCursorInWorld[i] + viewUp[i] * brushSize;
37110
- leftCursorInWorld[i] = centerCursorInWorld[i] - viewRight[i] * brushSize;
37111
- rightCursorInWorld[i] = centerCursorInWorld[i] + viewRight[i] * brushSize;
37112
- }
37113
- if (!this._hoverData) {
37114
- return;
37115
- }
37116
- const { brushCursor } = this._hoverData;
37117
- const { data } = brushCursor;
37118
- if (data.handles === undefined) {
37119
- data.handles = {};
37120
- }
37121
- data.handles.points = [
37122
- bottomCursorInWorld,
37123
- topCursorInWorld,
37124
- leftCursorInWorld,
37125
- rightCursorInWorld,
37126
- ];
37127
- const activeStrategy = this.configuration.activeStrategy;
37128
- const strategy = this.configuration.strategies[activeStrategy];
37129
- if (typeof strategy?.computeInnerCircleRadius === 'function') {
37130
- strategy.computeInnerCircleRadius({
37131
- configuration: this.configuration,
37132
- viewport,
37133
- });
37134
- }
37135
- data.invalidated = false;
37171
+ this.applyActiveStrategyCallback(enabledElement, this.getOperationData(element), _enums__WEBPACK_IMPORTED_MODULE_2__.StrategyCallbacks.CalculateCursorGeometry);
37136
37172
  }
37137
37173
  getStatistics(element, segmentIndices) {
37138
37174
  if (!element) {
@@ -37180,7 +37216,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
37180
37216
  this._hoverData.brushCursor.metadata.segmentColor = segmentColor;
37181
37217
  }
37182
37218
  renderAnnotation(enabledElement, svgDrawingHelper) {
37183
- if (!this._hoverData) {
37219
+ if (!this._hoverData || BrushTool.activeCursorTool !== this) {
37184
37220
  return;
37185
37221
  }
37186
37222
  const { viewport } = enabledElement;
@@ -37194,40 +37230,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
37194
37230
  const { element } = viewport;
37195
37231
  this._calculateCursor(element, centerCanvas);
37196
37232
  }
37197
- const toolMetadata = brushCursor.metadata;
37198
- if (!toolMetadata) {
37199
- return;
37200
- }
37201
- const annotationUID = toolMetadata.brushCursorUID;
37202
- const data = brushCursor.data;
37203
- const { points } = data.handles;
37204
- const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
37205
- const bottom = canvasCoordinates[0];
37206
- const top = canvasCoordinates[1];
37207
- const center = [
37208
- Math.floor((bottom[0] + top[0]) / 2),
37209
- Math.floor((bottom[1] + top[1]) / 2),
37210
- ];
37211
- const radius = Math.abs(bottom[1] - Math.floor((bottom[1] + top[1]) / 2));
37212
- const color = `rgb(${toolMetadata.segmentColor?.slice(0, 3) || [0, 0, 0]})`;
37213
- if (!viewport.getRenderingEngine()) {
37214
- console.warn('Rendering Engine has been destroyed');
37215
- return;
37216
- }
37217
- const circleUID = '0';
37218
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_7__.drawCircle)(svgDrawingHelper, annotationUID, circleUID, center, radius, {
37219
- color,
37220
- lineDash: this.centerSegmentIndexInfo.segmentIndex === 0 ? [1, 2] : null,
37221
- });
37222
- const { dynamicRadiusInCanvas } = this.configuration?.threshold || {
37223
- dynamicRadiusInCanvas: 0,
37224
- };
37225
- if (dynamicRadiusInCanvas) {
37226
- const circleUID1 = '1';
37227
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_7__.drawCircle)(svgDrawingHelper, annotationUID, circleUID1, center, dynamicRadiusInCanvas, {
37228
- color,
37229
- });
37230
- }
37233
+ this.applyActiveStrategyCallback(enabledElement, this.getOperationData(viewport.element), _enums__WEBPACK_IMPORTED_MODULE_2__.StrategyCallbacks.RenderCursor, svgDrawingHelper);
37231
37234
  }
37232
37235
  }
37233
37236
  BrushTool.toolName = 'Brush';
@@ -37482,6 +37485,7 @@ class LabelmapBaseTool extends _base__WEBPACK_IMPORTED_MODULE_1__/* .BaseTool */
37482
37485
  previewColor,
37483
37486
  previewSegmentIndex,
37484
37487
  createMemo: this.createMemo.bind(this),
37488
+ hoverData: this._hoverData,
37485
37489
  };
37486
37490
  return operationData;
37487
37491
  }
@@ -37646,7 +37650,7 @@ function lightenColor(r, g, b, a, factor = 0.4) {
37646
37650
  /* harmony import */ var _utilities_boundingBox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72282);
37647
37651
  /* harmony import */ var _BrushStrategy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55887);
37648
37652
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29857);
37649
- /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(11990);
37653
+ /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64664);
37650
37654
  /* harmony import */ var _utilities_math_sphere__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(62783);
37651
37655
 
37652
37656
 
@@ -37873,7 +37877,7 @@ function fillOutsideCircle() {
37873
37877
  /* harmony import */ var _utilities_boundingBox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72282);
37874
37878
  /* harmony import */ var _BrushStrategy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55887);
37875
37879
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29857);
37876
- /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(11990);
37880
+ /* harmony import */ var _compositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64664);
37877
37881
 
37878
37882
 
37879
37883
 
@@ -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";