@cornerstonejs/tools 1.32.2 → 1.33.0

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 (226) hide show
  1. package/dist/cjs/eventListeners/index.d.ts +2 -2
  2. package/dist/cjs/eventListeners/index.js +2 -1
  3. package/dist/cjs/eventListeners/index.js.map +1 -1
  4. package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.d.ts +5 -0
  5. package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.js +143 -0
  6. package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.js.map +1 -0
  7. package/dist/cjs/eventListeners/segmentation/index.d.ts +2 -1
  8. package/dist/cjs/eventListeners/segmentation/index.js +3 -1
  9. package/dist/cjs/eventListeners/segmentation/index.js.map +1 -1
  10. package/dist/cjs/eventListeners/segmentation/segmentationDataModifiedEventListener.js +31 -5
  11. package/dist/cjs/eventListeners/segmentation/segmentationDataModifiedEventListener.js.map +1 -1
  12. package/dist/cjs/store/addEnabledElement.js +1 -0
  13. package/dist/cjs/store/addEnabledElement.js.map +1 -1
  14. package/dist/cjs/store/removeEnabledElement.js +2 -0
  15. package/dist/cjs/store/removeEnabledElement.js.map +1 -1
  16. package/dist/cjs/tools/StackScrollToolMouseWheelTool.d.ts +1 -0
  17. package/dist/cjs/tools/StackScrollToolMouseWheelTool.js +2 -0
  18. package/dist/cjs/tools/StackScrollToolMouseWheelTool.js.map +1 -1
  19. package/dist/cjs/tools/annotation/CircleROITool.js +3 -1
  20. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  21. package/dist/cjs/tools/annotation/EllipticalROITool.js +1 -1
  22. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  23. package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -1
  24. package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.js +23 -10
  25. package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.js.map +1 -1
  26. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
  27. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +36 -22
  28. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  29. package/dist/cjs/tools/displayTools/Labelmap/validateRepresentationData.js +6 -5
  30. package/dist/cjs/tools/displayTools/Labelmap/validateRepresentationData.js.map +1 -1
  31. package/dist/cjs/tools/segmentation/BrushTool.js +40 -45
  32. package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
  33. package/dist/cjs/tools/segmentation/CircleScissorsTool.d.ts +4 -2
  34. package/dist/cjs/tools/segmentation/CircleScissorsTool.js +18 -17
  35. package/dist/cjs/tools/segmentation/CircleScissorsTool.js.map +1 -1
  36. package/dist/cjs/tools/segmentation/PaintFillTool.js +28 -5
  37. package/dist/cjs/tools/segmentation/PaintFillTool.js.map +1 -1
  38. package/dist/cjs/tools/segmentation/RectangleScissorsTool.d.ts +3 -1
  39. package/dist/cjs/tools/segmentation/RectangleScissorsTool.js +15 -16
  40. package/dist/cjs/tools/segmentation/RectangleScissorsTool.js.map +1 -1
  41. package/dist/cjs/tools/segmentation/SphereScissorsTool.d.ts +4 -2
  42. package/dist/cjs/tools/segmentation/SphereScissorsTool.js +20 -20
  43. package/dist/cjs/tools/segmentation/SphereScissorsTool.js.map +1 -1
  44. package/dist/cjs/tools/segmentation/strategies/eraseCircle.d.ts +2 -10
  45. package/dist/cjs/tools/segmentation/strategies/eraseCircle.js.map +1 -1
  46. package/dist/cjs/tools/segmentation/strategies/eraseRectangle.d.ts +4 -8
  47. package/dist/cjs/tools/segmentation/strategies/eraseRectangle.js +4 -20
  48. package/dist/cjs/tools/segmentation/strategies/eraseRectangle.js.map +1 -1
  49. package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -10
  50. package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  51. package/dist/cjs/tools/segmentation/strategies/fillCircle.d.ts +3 -11
  52. package/dist/cjs/tools/segmentation/strategies/fillCircle.js +57 -32
  53. package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
  54. package/dist/cjs/tools/segmentation/strategies/fillRectangle.d.ts +2 -7
  55. package/dist/cjs/tools/segmentation/strategies/fillRectangle.js +16 -8
  56. package/dist/cjs/tools/segmentation/strategies/fillRectangle.js.map +1 -1
  57. package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +2 -10
  58. package/dist/cjs/tools/segmentation/strategies/fillSphere.js +31 -17
  59. package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
  60. package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.d.ts +9 -0
  61. package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js +43 -0
  62. package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -0
  63. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +2 -2
  64. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js +2 -2
  65. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
  66. package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +5 -0
  67. package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.js +13 -0
  68. package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.js.map +1 -0
  69. package/dist/cjs/types/LabelmapToolOperationData.d.ts +14 -0
  70. package/dist/cjs/types/LabelmapToolOperationData.js +3 -0
  71. package/dist/cjs/types/LabelmapToolOperationData.js.map +1 -0
  72. package/dist/cjs/types/LabelmapTypes.d.ts +5 -1
  73. package/dist/cjs/types/ScrollOptions.d.ts +1 -0
  74. package/dist/cjs/types/index.d.ts +2 -1
  75. package/dist/cjs/utilities/math/ellipse/pointInEllipse.d.ts +7 -9
  76. package/dist/cjs/utilities/math/ellipse/pointInEllipse.js +19 -11
  77. package/dist/cjs/utilities/math/ellipse/pointInEllipse.js.map +1 -1
  78. package/dist/cjs/utilities/scroll.d.ts +1 -1
  79. package/dist/cjs/utilities/scroll.js +5 -4
  80. package/dist/cjs/utilities/scroll.js.map +1 -1
  81. package/dist/esm/eventListeners/index.js +2 -2
  82. package/dist/esm/eventListeners/index.js.map +1 -1
  83. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +115 -0
  84. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js.map +1 -0
  85. package/dist/esm/eventListeners/segmentation/index.js +2 -1
  86. package/dist/esm/eventListeners/segmentation/index.js.map +1 -1
  87. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +32 -6
  88. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js.map +1 -1
  89. package/dist/esm/store/addEnabledElement.js +2 -1
  90. package/dist/esm/store/addEnabledElement.js.map +1 -1
  91. package/dist/esm/store/removeEnabledElement.js +2 -0
  92. package/dist/esm/store/removeEnabledElement.js.map +1 -1
  93. package/dist/esm/tools/StackScrollToolMouseWheelTool.js +2 -0
  94. package/dist/esm/tools/StackScrollToolMouseWheelTool.js.map +1 -1
  95. package/dist/esm/tools/annotation/CircleROITool.js +4 -2
  96. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  97. package/dist/esm/tools/annotation/EllipticalROITool.js +1 -1
  98. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  99. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +24 -11
  100. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js.map +1 -1
  101. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +36 -22
  102. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  103. package/dist/esm/tools/displayTools/Labelmap/validateRepresentationData.js +6 -5
  104. package/dist/esm/tools/displayTools/Labelmap/validateRepresentationData.js.map +1 -1
  105. package/dist/esm/tools/segmentation/BrushTool.js +38 -29
  106. package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
  107. package/dist/esm/tools/segmentation/CircleScissorsTool.js +27 -15
  108. package/dist/esm/tools/segmentation/CircleScissorsTool.js.map +1 -1
  109. package/dist/esm/tools/segmentation/PaintFillTool.js +28 -5
  110. package/dist/esm/tools/segmentation/PaintFillTool.js.map +1 -1
  111. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +26 -17
  112. package/dist/esm/tools/segmentation/RectangleScissorsTool.js.map +1 -1
  113. package/dist/esm/tools/segmentation/SphereScissorsTool.js +28 -17
  114. package/dist/esm/tools/segmentation/SphereScissorsTool.js.map +1 -1
  115. package/dist/esm/tools/segmentation/strategies/eraseCircle.js.map +1 -1
  116. package/dist/esm/tools/segmentation/strategies/eraseRectangle.js +4 -20
  117. package/dist/esm/tools/segmentation/strategies/eraseRectangle.js.map +1 -1
  118. package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  119. package/dist/esm/tools/segmentation/strategies/fillCircle.js +56 -31
  120. package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
  121. package/dist/esm/tools/segmentation/strategies/fillRectangle.js +16 -8
  122. package/dist/esm/tools/segmentation/strategies/fillRectangle.js.map +1 -1
  123. package/dist/esm/tools/segmentation/strategies/fillSphere.js +32 -18
  124. package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
  125. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +40 -0
  126. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -0
  127. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js +2 -2
  128. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
  129. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js +9 -0
  130. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js.map +1 -0
  131. package/dist/esm/types/LabelmapToolOperationData.js +2 -0
  132. package/dist/esm/types/LabelmapToolOperationData.js.map +1 -0
  133. package/dist/esm/utilities/math/ellipse/pointInEllipse.js +19 -11
  134. package/dist/esm/utilities/math/ellipse/pointInEllipse.js.map +1 -1
  135. package/dist/esm/utilities/scroll.js +5 -4
  136. package/dist/esm/utilities/scroll.js.map +1 -1
  137. package/dist/types/eventListeners/index.d.ts +2 -2
  138. package/dist/types/eventListeners/index.d.ts.map +1 -1
  139. package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts +6 -0
  140. package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts.map +1 -0
  141. package/dist/types/eventListeners/segmentation/index.d.ts +2 -1
  142. package/dist/types/eventListeners/segmentation/index.d.ts.map +1 -1
  143. package/dist/types/eventListeners/segmentation/segmentationDataModifiedEventListener.d.ts.map +1 -1
  144. package/dist/types/store/addEnabledElement.d.ts.map +1 -1
  145. package/dist/types/store/removeEnabledElement.d.ts.map +1 -1
  146. package/dist/types/tools/StackScrollToolMouseWheelTool.d.ts +1 -0
  147. package/dist/types/tools/StackScrollToolMouseWheelTool.d.ts.map +1 -1
  148. package/dist/types/tools/annotation/CircleROITool.d.ts.map +1 -1
  149. package/dist/types/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -1
  150. package/dist/types/tools/displayTools/Labelmap/addLabelmapToElement.d.ts.map +1 -1
  151. package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
  152. package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts.map +1 -1
  153. package/dist/types/tools/displayTools/Labelmap/validateRepresentationData.d.ts.map +1 -1
  154. package/dist/types/tools/segmentation/BrushTool.d.ts.map +1 -1
  155. package/dist/types/tools/segmentation/CircleScissorsTool.d.ts +4 -2
  156. package/dist/types/tools/segmentation/CircleScissorsTool.d.ts.map +1 -1
  157. package/dist/types/tools/segmentation/PaintFillTool.d.ts.map +1 -1
  158. package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts +3 -1
  159. package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts.map +1 -1
  160. package/dist/types/tools/segmentation/SphereScissorsTool.d.ts +4 -2
  161. package/dist/types/tools/segmentation/SphereScissorsTool.d.ts.map +1 -1
  162. package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts +2 -10
  163. package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts.map +1 -1
  164. package/dist/types/tools/segmentation/strategies/eraseRectangle.d.ts +4 -8
  165. package/dist/types/tools/segmentation/strategies/eraseRectangle.d.ts.map +1 -1
  166. package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts +2 -10
  167. package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts.map +1 -1
  168. package/dist/types/tools/segmentation/strategies/fillCircle.d.ts +3 -11
  169. package/dist/types/tools/segmentation/strategies/fillCircle.d.ts.map +1 -1
  170. package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts +2 -7
  171. package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts.map +1 -1
  172. package/dist/types/tools/segmentation/strategies/fillSphere.d.ts +2 -10
  173. package/dist/types/tools/segmentation/strategies/fillSphere.d.ts.map +1 -1
  174. package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts +10 -0
  175. package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts.map +1 -0
  176. package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +2 -2
  177. package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts.map +1 -1
  178. package/dist/types/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +6 -0
  179. package/dist/types/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts.map +1 -0
  180. package/dist/types/types/LabelmapToolOperationData.d.ts +15 -0
  181. package/dist/types/types/LabelmapToolOperationData.d.ts.map +1 -0
  182. package/dist/types/types/LabelmapTypes.d.ts +5 -1
  183. package/dist/types/types/LabelmapTypes.d.ts.map +1 -1
  184. package/dist/types/types/ScrollOptions.d.ts +1 -0
  185. package/dist/types/types/ScrollOptions.d.ts.map +1 -1
  186. package/dist/types/types/index.d.ts +2 -1
  187. package/dist/types/types/index.d.ts.map +1 -1
  188. package/dist/types/utilities/math/ellipse/pointInEllipse.d.ts +7 -9
  189. package/dist/types/utilities/math/ellipse/pointInEllipse.d.ts.map +1 -1
  190. package/dist/types/utilities/scroll.d.ts +1 -1
  191. package/dist/types/utilities/scroll.d.ts.map +1 -1
  192. package/dist/umd/index.js +1 -1
  193. package/dist/umd/index.js.map +1 -1
  194. package/package.json +3 -3
  195. package/src/eventListeners/index.ts +2 -0
  196. package/src/eventListeners/segmentation/imageChangeEventListener.ts +215 -0
  197. package/src/eventListeners/segmentation/index.ts +2 -0
  198. package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +70 -9
  199. package/src/store/addEnabledElement.ts +2 -0
  200. package/src/store/removeEnabledElement.ts +3 -0
  201. package/src/tools/StackScrollToolMouseWheelTool.ts +2 -0
  202. package/src/tools/annotation/CircleROITool.ts +5 -5
  203. package/src/tools/annotation/EllipticalROITool.ts +1 -1
  204. package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +51 -22
  205. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +65 -35
  206. package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +17 -11
  207. package/src/tools/segmentation/BrushTool.ts +78 -39
  208. package/src/tools/segmentation/CircleScissorsTool.ts +46 -29
  209. package/src/tools/segmentation/PaintFillTool.ts +45 -8
  210. package/src/tools/segmentation/RectangleScissorsTool.ts +41 -31
  211. package/src/tools/segmentation/SphereScissorsTool.ts +46 -28
  212. package/src/tools/segmentation/strategies/eraseCircle.ts +3 -11
  213. package/src/tools/segmentation/strategies/eraseRectangle.ts +13 -42
  214. package/src/tools/segmentation/strategies/eraseSphere.ts +2 -10
  215. package/src/tools/segmentation/strategies/fillCircle.ts +93 -61
  216. package/src/tools/segmentation/strategies/fillRectangle.ts +31 -22
  217. package/src/tools/segmentation/strategies/fillSphere.ts +51 -41
  218. package/src/tools/segmentation/strategies/utils/getStrategyData.ts +58 -0
  219. package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +3 -2
  220. package/src/tools/segmentation/strategies/utils/stackVolumeCheck.ts +33 -0
  221. package/src/types/LabelmapToolOperationData.ts +27 -0
  222. package/src/types/LabelmapTypes.ts +16 -1
  223. package/src/types/ScrollOptions.ts +1 -0
  224. package/src/types/index.ts +8 -0
  225. package/src/utilities/math/ellipse/pointInEllipse.ts +43 -22
  226. package/src/utilities/scroll.ts +7 -4
@@ -1,36 +1,24 @@
1
1
  import { vec3 } from 'gl-matrix';
2
+ import { cache } from '@cornerstonejs/core';
2
3
  import { utilities as csUtils } from '@cornerstonejs/core';
3
4
  import { getCanvasEllipseCorners, pointInEllipse, } from '../../../utilities/math/ellipse';
4
5
  import { getBoundingBoxAroundShape } from '../../../utilities/boundingBox';
5
6
  import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
6
7
  import { pointInShapeCallback } from '../../../utilities';
7
8
  import isWithinThreshold from './utils/isWithinThreshold';
9
+ import { getStrategyData } from './utils/getStrategyData';
10
+ import { isVolumeSegmentation } from './utils/stackVolumeCheck';
8
11
  const { transformWorldToIndex } = csUtils;
9
12
  function fillCircle(enabledElement, operationData, threshold = false) {
10
- const { volume: segmentationVolume, imageVolume, points, segmentsLocked, segmentIndex, segmentationId, strategySpecificConfiguration, } = operationData;
11
- const { imageData, dimensions } = segmentationVolume;
12
- const scalarData = segmentationVolume.getScalarData();
13
+ const { points, segmentsLocked, segmentIndex, segmentationId, strategySpecificConfiguration, } = operationData;
13
14
  const { viewport } = enabledElement;
14
- const center = vec3.fromValues(0, 0, 0);
15
- points.forEach((point) => {
16
- vec3.add(center, center, point);
17
- });
18
- vec3.scale(center, center, 1 / points.length);
19
- const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
20
- const [topLeftCanvas, bottomRightCanvas] = getCanvasEllipseCorners(canvasCoordinates);
21
- const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
22
- const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
23
- const ellipsoidCornersIJK = [
24
- transformWorldToIndex(imageData, topLeftWorld),
25
- transformWorldToIndex(imageData, bottomRightWorld),
26
- ];
27
- const boundsIJK = getBoundingBoxAroundShape(ellipsoidCornersIJK, dimensions);
28
- const ellipseObj = {
29
- center: center,
30
- xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
31
- yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
32
- zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
33
- };
15
+ const data = getStrategyData({ operationData, viewport });
16
+ if (!data) {
17
+ console.warn('No data found for fillCircle');
18
+ return;
19
+ }
20
+ const { imageScalarData, segmentationImageData, segmentationScalarData } = data;
21
+ const { ellipseObj, boundsIJK } = getEllipse(viewport, segmentationImageData, points);
34
22
  const modifiedSlicesToUse = new Set();
35
23
  let callback;
36
24
  if (threshold) {
@@ -38,8 +26,8 @@ function fillCircle(enabledElement, operationData, threshold = false) {
38
26
  if (segmentsLocked.includes(value)) {
39
27
  return;
40
28
  }
41
- if (isWithinThreshold(index, imageVolume, strategySpecificConfiguration)) {
42
- scalarData[index] = segmentIndex;
29
+ if (isWithinThreshold(index, imageScalarData, strategySpecificConfiguration)) {
30
+ segmentationScalarData[index] = segmentIndex;
43
31
  modifiedSlicesToUse.add(pointIJK[2]);
44
32
  }
45
33
  };
@@ -49,11 +37,13 @@ function fillCircle(enabledElement, operationData, threshold = false) {
49
37
  if (segmentsLocked.includes(value)) {
50
38
  return;
51
39
  }
52
- scalarData[index] = segmentIndex;
40
+ segmentationScalarData[index] = segmentIndex;
53
41
  modifiedSlicesToUse.add(pointIJK[2]);
54
42
  };
55
43
  }
56
- pointInShapeCallback(imageData, (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS), callback, boundsIJK);
44
+ pointInShapeCallback(segmentationImageData, (pointLPS) => pointInEllipse(ellipseObj, pointLPS, {
45
+ fast: true,
46
+ }), callback, boundsIJK);
57
47
  const arrayOfSlices = Array.from(modifiedSlicesToUse);
58
48
  triggerSegmentationDataModified(segmentationId, arrayOfSlices);
59
49
  }
@@ -61,14 +51,49 @@ export function fillInsideCircle(enabledElement, operationData) {
61
51
  fillCircle(enabledElement, operationData, false);
62
52
  }
63
53
  export function thresholdInsideCircle(enabledElement, operationData) {
64
- const { volume, imageVolume } = operationData;
65
- if (!csUtils.isEqual(volume.dimensions, imageVolume.dimensions) ||
66
- !csUtils.isEqual(volume.direction, imageVolume.direction)) {
67
- throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
54
+ if (isVolumeSegmentation(operationData)) {
55
+ const { referencedVolumeId, volumeId } = operationData;
56
+ const imageVolume = cache.getVolume(referencedVolumeId);
57
+ const segmentation = cache.getVolume(volumeId);
58
+ if (!csUtils.isEqual(segmentation.dimensions, imageVolume.dimensions) ||
59
+ !csUtils.isEqual(segmentation.direction, imageVolume.direction)) {
60
+ throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
61
+ }
68
62
  }
69
63
  fillCircle(enabledElement, operationData, true);
70
64
  }
71
65
  export function fillOutsideCircle(enabledElement, operationData) {
72
66
  throw new Error('Not yet implemented');
73
67
  }
68
+ function getCenter(points) {
69
+ const center = vec3.fromValues(0, 0, 0);
70
+ points.forEach((point) => {
71
+ vec3.add(center, center, point);
72
+ });
73
+ vec3.scale(center, center, 1 / points.length);
74
+ return center;
75
+ }
76
+ function getEllipse(viewport, imageData, points) {
77
+ const center = getCenter(points);
78
+ const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
79
+ const dimensions = imageData.getDimensions();
80
+ const [topLeftCanvas, bottomRightCanvas] = getCanvasEllipseCorners(canvasCoordinates);
81
+ const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
82
+ const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
83
+ const ellipsoidCornersIJK = [
84
+ transformWorldToIndex(imageData, topLeftWorld),
85
+ transformWorldToIndex(imageData, bottomRightWorld),
86
+ ];
87
+ const boundsIJK = getBoundingBoxAroundShape(ellipsoidCornersIJK, dimensions);
88
+ if (boundsIJK.every(([min, max]) => min !== max)) {
89
+ throw new Error('Oblique segmentation tools are not supported yet');
90
+ }
91
+ const ellipseObj = {
92
+ center: center,
93
+ xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
94
+ yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
95
+ zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
96
+ };
97
+ return { ellipseObj, boundsIJK };
98
+ }
74
99
  //# sourceMappingURL=fillCircle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fillCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillCircle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EACL,uBAAuB,EACvB,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,iEAAiE,CAAC;AAClH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,iBAAiB,MAAM,2BAA2B,CAAC;AAE1D,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;AAe1C,SAAS,UAAU,CACjB,cAAqC,EACrC,aAA4B,EAC5B,SAAS,GAAG,KAAK;IAEjB,MAAM,EACJ,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EACX,MAAM,EACN,cAAc,EACd,YAAY,EACZ,cAAc,EACd,6BAA6B,GAC9B,GAAG,aAAa,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC;IACrD,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC;IACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;IAGpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAIvE,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC,GACtC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAG7C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAEnE,MAAM,mBAAmB,GAAG;QACZ,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC;QAC9C,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACjE,CAAC;IAEF,MAAM,SAAS,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAG7E,MAAM,UAAU,GAAG;QACjB,MAAM,EAAE,MAAsB;QAC9B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;KAC7D,CAAC;IAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiB,CAAC;IAErD,IAAI,QAAQ,CAAC;IAEb,IAAI,SAAS,EAAE;QACb,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAClC,OAAO;aACR;YAED,IACE,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,6BAA6B,CAAC,EACpE;gBACA,UAAU,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;gBAEjC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;QACH,CAAC,CAAC;KACH;SAAM;QACL,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAClC,OAAO;aACR;YACD,UAAU,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;YAEjC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC;KACH;IAED,oBAAoB,CAClB,SAAS,EACT,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,EAC5D,QAAQ,EACR,SAAS,CACV,CAAC;IAEF,MAAM,aAAa,GAAa,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAEhE,+BAA+B,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AACjE,CAAC;AAQD,MAAM,UAAU,gBAAgB,CAC9B,cAAqC,EACrC,aAA4B;IAE5B,UAAU,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAQD,MAAM,UAAU,qBAAqB,CACnC,cAAqC,EACrC,aAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;IAE9C,IACE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;QAC3D,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,EACzD;QACA,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;KACH;IAED,UAAU,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAQD,MAAM,UAAU,iBAAiB,CAC/B,cAAqC,EACrC,aAA4B;IAE5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"fillCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillCircle.ts"],"names":[],"mappings":"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"}
@@ -2,34 +2,42 @@ import { utilities as csUtils } from '@cornerstonejs/core';
2
2
  import { getBoundingBoxAroundShape } from '../../../utilities/boundingBox';
3
3
  import { pointInShapeCallback } from '../../../utilities';
4
4
  import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
5
+ import { getStrategyData } from './utils/getStrategyData';
5
6
  const { transformWorldToIndex } = csUtils;
6
7
  function fillRectangle(enabledElement, operationData, inside = true) {
7
- const { volume: segmentation, points, segmentsLocked, segmentIndex, segmentationId, constraintFn, } = operationData;
8
- const { imageData, dimensions } = segmentation;
9
- const scalarData = segmentation.getScalarData();
8
+ const { points, segmentsLocked, segmentIndex, segmentationId, constraintFn } = operationData;
9
+ const strategyData = getStrategyData({
10
+ operationData,
11
+ viewport: enabledElement.viewport,
12
+ });
13
+ if (!strategyData) {
14
+ console.warn('No data found for fillRectangle');
15
+ return;
16
+ }
17
+ const { segmentationImageData, segmentationScalarData } = strategyData;
10
18
  let rectangleCornersIJK = points.map((world) => {
11
- return transformWorldToIndex(imageData, world);
19
+ return transformWorldToIndex(segmentationImageData, world);
12
20
  });
13
21
  rectangleCornersIJK = rectangleCornersIJK.map((point) => {
14
22
  return point.map((coord) => {
15
23
  return Math.round(coord);
16
24
  });
17
25
  });
18
- const boundsIJK = getBoundingBoxAroundShape(rectangleCornersIJK, dimensions);
26
+ const boundsIJK = getBoundingBoxAroundShape(rectangleCornersIJK, segmentationImageData.getDimensions());
19
27
  const pointInRectangle = () => true;
20
28
  const callback = ({ value, index, pointIJK }) => {
21
29
  if (segmentsLocked.includes(value)) {
22
30
  return;
23
31
  }
24
32
  if (!constraintFn) {
25
- scalarData[index] = segmentIndex;
33
+ segmentationScalarData[index] = segmentIndex;
26
34
  return;
27
35
  }
28
36
  if (constraintFn(pointIJK)) {
29
- scalarData[index] = segmentIndex;
37
+ segmentationScalarData[index] = segmentIndex;
30
38
  }
31
39
  };
32
- pointInShapeCallback(imageData, pointInRectangle, callback, boundsIJK);
40
+ pointInShapeCallback(segmentationImageData, pointInRectangle, callback, boundsIJK);
33
41
  triggerSegmentationDataModified(segmentationId);
34
42
  }
35
43
  export function fillInsideRectangle(enabledElement, operationData) {
@@ -1 +1 @@
1
- {"version":3,"file":"fillRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillRectangle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iEAAiE,CAAC;AAElH,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;AAoB1C,SAAS,aAAa,CACpB,cAAqC,EACrC,aAA4B,EAC5B,MAAM,GAAG,IAAI;IAEb,MAAM,EACJ,MAAM,EAAE,YAAY,EACpB,MAAM,EACN,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,GACb,GAAG,aAAa,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;IAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAEhD,IAAI,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,OAAO,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAGH,mBAAmB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAG7E,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IAEpC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC9C,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,UAAU,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;YACjC,OAAO;SACR;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;YAC1B,UAAU,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;SAClC;IACH,CAAC,CAAC;IAEF,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEvE,+BAA+B,CAAC,cAAc,CAAC,CAAC;AAClD,CAAC;AASD,MAAM,UAAU,mBAAmB,CACjC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AASD,MAAM,UAAU,oBAAoB,CAClC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"fillRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillRectangle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iEAAiE,CAAC;AAElH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;AAe1C,SAAS,aAAa,CACpB,cAAqC,EACrC,aAA4B,EAC5B,MAAM,GAAG,IAAI;IAEb,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,GAC1E,aAAa,CAAC;IAEhB,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,aAAa;QACb,QAAQ,EAAE,cAAc,CAAC,QAAQ;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,OAAO;KACR;IAED,MAAM,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,YAAY,CAAC;IAEvE,IAAI,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,OAAO,qBAAqB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAGH,mBAAmB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,yBAAyB,CACzC,mBAAmB,EACnB,qBAAqB,CAAC,aAAa,EAAE,CACtC,CAAC;IAGF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IAEpC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC9C,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,sBAAsB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;YAC7C,OAAO;SACR;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;YAC1B,sBAAsB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;SAC9C;IACH,CAAC,CAAC;IAEF,oBAAoB,CAClB,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,SAAS,CACV,CAAC;IAEF,+BAA+B,CAAC,cAAc,CAAC,CAAC;AAClD,CAAC;AASD,MAAM,UAAU,mBAAmB,CACjC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AASD,MAAM,UAAU,oBAAoB,CAClC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC"}
@@ -1,21 +1,27 @@
1
- import { utilities as csUtils } from '@cornerstonejs/core';
1
+ import { cache, utilities as csUtils } from '@cornerstonejs/core';
2
2
  import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
3
3
  import { pointInSurroundingSphereCallback } from '../../../utilities';
4
4
  import isWithinThreshold from './utils/isWithinThreshold';
5
+ import { getStrategyData } from './utils/getStrategyData';
6
+ import { isVolumeSegmentation } from './utils/stackVolumeCheck';
5
7
  function fillSphere(enabledElement, operationData, _inside = true, threshold = false) {
6
8
  const { viewport } = enabledElement;
7
- const { volume: segmentation, segmentsLocked, segmentIndex, imageVolume, strategySpecificConfiguration, segmentationId, points, } = operationData;
8
- const { imageData, dimensions } = segmentation;
9
- const scalarData = segmentation.getScalarData();
9
+ const { segmentsLocked, segmentIndex, strategySpecificConfiguration, points, } = operationData;
10
+ const strategyData = getStrategyData({ operationData, viewport });
11
+ if (!strategyData) {
12
+ console.warn('No data found for fillSphere');
13
+ return;
14
+ }
15
+ const { imageScalarData, segmentationImageData, segmentationScalarData } = strategyData;
10
16
  const scalarIndex = [];
11
17
  let callback;
12
18
  if (threshold) {
13
- callback = ({ value, index, pointIJK }) => {
19
+ callback = ({ value, index }) => {
14
20
  if (segmentsLocked.includes(value)) {
15
21
  return;
16
22
  }
17
- if (isWithinThreshold(index, imageVolume, strategySpecificConfiguration)) {
18
- scalarData[index] = segmentIndex;
23
+ if (isWithinThreshold(index, imageScalarData, strategySpecificConfiguration)) {
24
+ segmentationScalarData[index] = segmentIndex;
19
25
  scalarIndex.push(index);
20
26
  }
21
27
  };
@@ -25,25 +31,33 @@ function fillSphere(enabledElement, operationData, _inside = true, threshold = f
25
31
  if (segmentsLocked.includes(value)) {
26
32
  return;
27
33
  }
28
- scalarData[index] = segmentIndex;
34
+ segmentationScalarData[index] = segmentIndex;
29
35
  scalarIndex.push(index);
30
36
  };
31
37
  }
32
- pointInSurroundingSphereCallback(imageData, [points[0], points[1]], callback, viewport);
33
- const zMultiple = dimensions[0] * dimensions[1];
34
- const minSlice = Math.floor(scalarIndex[0] / zMultiple);
35
- const maxSlice = Math.floor(scalarIndex[scalarIndex.length - 1] / zMultiple);
36
- const sliceArray = Array.from({ length: maxSlice - minSlice + 1 }, (v, k) => k + minSlice);
37
- triggerSegmentationDataModified(segmentationId, sliceArray);
38
+ pointInSurroundingSphereCallback(segmentationImageData, [points[0], points[1]], callback, viewport);
39
+ const dimensions = segmentationImageData.getDimensions();
40
+ let sliceArray;
41
+ if (isVolumeSegmentation(operationData)) {
42
+ const zMultiple = dimensions[0] * dimensions[1];
43
+ const minSlice = Math.floor(scalarIndex[0] / zMultiple);
44
+ const maxSlice = Math.floor(scalarIndex[scalarIndex.length - 1] / zMultiple);
45
+ sliceArray = Array.from({ length: maxSlice - minSlice + 1 }, (v, k) => k + minSlice);
46
+ triggerSegmentationDataModified(operationData.volumeId, sliceArray);
47
+ }
38
48
  }
39
49
  export function fillInsideSphere(enabledElement, operationData) {
40
50
  fillSphere(enabledElement, operationData, true);
41
51
  }
42
52
  export function thresholdInsideSphere(enabledElement, operationData) {
43
- const { volume, imageVolume } = operationData;
44
- if (!csUtils.isEqual(volume.dimensions, imageVolume.dimensions) ||
45
- !csUtils.isEqual(volume.direction, imageVolume.direction)) {
46
- throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
53
+ if (isVolumeSegmentation(operationData)) {
54
+ const { referencedVolumeId, volumeId } = operationData;
55
+ const imageVolume = cache.getVolume(referencedVolumeId);
56
+ const segmentation = cache.getVolume(volumeId);
57
+ if (!csUtils.isEqual(segmentation.dimensions, imageVolume.dimensions) ||
58
+ !csUtils.isEqual(segmentation.direction, imageVolume.direction)) {
59
+ throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
60
+ }
47
61
  }
48
62
  fillSphere(enabledElement, operationData, true, true);
49
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fillSphere.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillSphere.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fillSphere.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillSphere.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { cache } from '@cornerstonejs/core';
2
+ import { isVolumeSegmentation } from './stackVolumeCheck';
3
+ function getStrategyData({ operationData, viewport }) {
4
+ let segmentationImageData, segmentationScalarData, imageScalarData;
5
+ if (isVolumeSegmentation(operationData)) {
6
+ const { volumeId, referencedVolumeId } = operationData;
7
+ const segmentationVolume = cache.getVolume(volumeId);
8
+ const imageVolume = cache.getVolume(referencedVolumeId);
9
+ if (!segmentationVolume || !imageVolume) {
10
+ return;
11
+ }
12
+ ({ imageData: segmentationImageData } = segmentationVolume);
13
+ segmentationScalarData = segmentationVolume.getScalarData();
14
+ imageScalarData = imageVolume.getScalarData();
15
+ }
16
+ else {
17
+ const { imageIdReferenceMap, segmentationRepresentationUID } = operationData;
18
+ if (!imageIdReferenceMap) {
19
+ return;
20
+ }
21
+ const currentImageId = viewport.getCurrentImageId();
22
+ if (!currentImageId) {
23
+ return;
24
+ }
25
+ const actor = viewport.getActor(segmentationRepresentationUID);
26
+ segmentationImageData = actor.actor.getMapper().getInputData();
27
+ const currentSegmentationImageId = imageIdReferenceMap.get(currentImageId);
28
+ const segmentationImage = cache.getImage(currentSegmentationImageId);
29
+ segmentationScalarData = segmentationImage.getPixelData();
30
+ const image = cache.getImage(currentImageId);
31
+ imageScalarData = image.getPixelData();
32
+ }
33
+ return {
34
+ segmentationImageData,
35
+ segmentationScalarData,
36
+ imageScalarData,
37
+ };
38
+ }
39
+ export { getStrategyData };
40
+ //# sourceMappingURL=getStrategyData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getStrategyData.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/utils/getStrategyData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,SAAS,eAAe,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE;IAClD,IAAI,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,CAAC;IACnE,IAAI,oBAAoB,CAAC,aAAa,CAAC,EAAE;QACvC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,aAAa,CAAC;QAEvD,MAAM,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAExD,IAAI,CAAC,kBAAkB,IAAI,CAAC,WAAW,EAAE;YACvC,OAAO;SACR;QAED,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,kBAAkB,CAAC,CAAC;QAC5D,sBAAsB,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC;QAC5D,eAAe,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;KAC/C;SAAM;QACL,MAAM,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,GAC1D,aAA+C,CAAC;QAElD,IAAI,CAAC,mBAAmB,EAAE;YACxB,OAAO;SACR;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACpD,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;SACR;QAKD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QAC/D,qBAAqB,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;QAC/D,MAAM,0BAA0B,GAAG,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE3E,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QACrE,sBAAsB,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAE1D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAK7C,eAAe,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;KACxC;IAED,OAAO;QACL,qBAAqB;QACrB,sBAAsB;QACtB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
- function isWithinThreshold(index, imageVolume, strategySpecificConfiguration) {
1
+ function isWithinThreshold(index, imageScalarData, strategySpecificConfiguration) {
2
2
  const { THRESHOLD_INSIDE_CIRCLE } = strategySpecificConfiguration;
3
- const voxelValue = imageVolume.getScalarData()[index];
3
+ const voxelValue = imageScalarData[index];
4
4
  const { threshold } = THRESHOLD_INSIDE_CIRCLE;
5
5
  return threshold[0] <= voxelValue && voxelValue <= threshold[1];
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"isWithinThreshold.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/utils/isWithinThreshold.ts"],"names":[],"mappings":"AAEA,SAAS,iBAAiB,CACxB,KAAa,EACb,WAA+B,EAC/B,6BAAkC;IAElC,MAAM,EAAE,uBAAuB,EAAE,GAAG,6BAA6B,CAAC;IAElE,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,EAAE,SAAS,EAAE,GAAG,uBAAuB,CAAC;IAE9C,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"isWithinThreshold.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/utils/isWithinThreshold.ts"],"names":[],"mappings":"AAGA,SAAS,iBAAiB,CACxB,KAAa,EACb,eAA2B,EAC3B,6BAAkC;IAElC,MAAM,EAAE,uBAAuB,EAAE,GAAG,6BAA6B,CAAC;IAElE,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,uBAAuB,CAAC;IAE9C,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ function isStackSegmentation(operationData) {
2
+ return (operationData.imageIdReferenceMap !==
3
+ undefined);
4
+ }
5
+ function isVolumeSegmentation(operationData) {
6
+ return (operationData.volumeId !== undefined);
7
+ }
8
+ export { isStackSegmentation, isVolumeSegmentation };
9
+ //# sourceMappingURL=stackVolumeCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackVolumeCheck.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/utils/stackVolumeCheck.ts"],"names":[],"mappings":"AAWA,SAAS,mBAAmB,CAC1B,aAAmE;IAInE,OAAO,CACJ,aAAgD,CAAC,mBAAmB;QACrE,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,aAAmE;IAInE,OAAO,CACJ,aAAiD,CAAC,QAAQ,KAAK,SAAS,CAC1E,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LabelmapToolOperationData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelmapToolOperationData.js","sourceRoot":"","sources":["../../../src/types/LabelmapToolOperationData.ts"],"names":[],"mappings":""}
@@ -1,17 +1,25 @@
1
- export default function pointInEllipse(ellipse, pointLPS) {
2
- const { center: circleCenterWorld, xRadius, yRadius, zRadius } = ellipse;
3
- const [x, y, z] = pointLPS;
4
- const [x0, y0, z0] = circleCenterWorld;
5
- let inside = 0;
6
- if (xRadius !== 0) {
7
- inside += ((x - x0) * (x - x0)) / (xRadius * xRadius);
1
+ export default function pointInEllipse(ellipse, pointLPS, inverts = {}) {
2
+ const { center, xRadius, yRadius, zRadius } = ellipse;
3
+ if (inverts.invXRadiusSq === undefined ||
4
+ inverts.invYRadiusSq === undefined ||
5
+ inverts.invZRadiusSq === undefined) {
6
+ inverts.invXRadiusSq = xRadius !== 0 ? 1 / xRadius ** 2 : 0;
7
+ inverts.invYRadiusSq = yRadius !== 0 ? 1 / yRadius ** 2 : 0;
8
+ inverts.invZRadiusSq = zRadius !== 0 ? 1 / zRadius ** 2 : 0;
8
9
  }
9
- if (yRadius !== 0) {
10
- inside += ((y - y0) * (y - y0)) / (yRadius * yRadius);
10
+ let inside = 0;
11
+ const dx = pointLPS[0] - center[0];
12
+ inside += dx * dx * inverts.invXRadiusSq;
13
+ if (inside > 1) {
14
+ return false;
11
15
  }
12
- if (zRadius !== 0) {
13
- inside += ((z - z0) * (z - z0)) / (zRadius * zRadius);
16
+ const dy = pointLPS[1] - center[1];
17
+ inside += dy * dy * inverts.invYRadiusSq;
18
+ if (inside > 1) {
19
+ return false;
14
20
  }
21
+ const dz = pointLPS[2] - center[2];
22
+ inside += dz * dz * inverts.invZRadiusSq;
15
23
  return inside <= 1;
16
24
  }
17
25
  //# sourceMappingURL=pointInEllipse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pointInEllipse.js","sourceRoot":"","sources":["../../../../../src/utilities/math/ellipse/pointInEllipse.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAgB,EAChB,QAAc;IAEd,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC;IAEvC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,KAAK,CAAC,EAAE;QACjB,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;KACvD;IAED,IAAI,OAAO,KAAK,CAAC,EAAE;QACjB,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;KACvD;IAED,IAAI,OAAO,KAAK,CAAC,EAAE;QACjB,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;KACvD;IAED,OAAO,MAAM,IAAI,CAAC,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"pointInEllipse.js","sourceRoot":"","sources":["../../../../../src/utilities/math/ellipse/pointInEllipse.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAO,EACP,QAAQ,EACR,UAAmB,EAAE;IAErB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAItD,IACE,OAAO,CAAC,YAAY,KAAK,SAAS;QAClC,OAAO,CAAC,YAAY,KAAK,SAAS;QAClC,OAAO,CAAC,YAAY,KAAK,SAAS,EAClC;QACA,OAAO,CAAC,YAAY,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,YAAY,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,YAAY,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IAGf,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,EAAE;QACd,OAAO,KAAK,CAAC;KACd;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,EAAE;QACd,OAAO,KAAK,CAAC;KACd;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAGzC,OAAO,MAAM,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -9,12 +9,12 @@ export default function scroll(viewport, options) {
9
9
  throw new Error('Scroll::Stack Viewport has no images');
10
10
  }
11
11
  const { type: viewportType } = viewport;
12
- const { volumeId, delta } = options;
12
+ const { volumeId, delta, scrollSlabs } = options;
13
13
  if (viewport instanceof StackViewport) {
14
14
  viewport.scroll(delta, options.debounceLoading, options.loop);
15
15
  }
16
16
  else if (viewport instanceof VolumeViewport) {
17
- scrollVolume(viewport, volumeId, delta);
17
+ scrollVolume(viewport, volumeId, delta, scrollSlabs);
18
18
  }
19
19
  else if (viewport instanceof VideoViewport) {
20
20
  viewport.scroll(delta);
@@ -23,8 +23,9 @@ export default function scroll(viewport, options) {
23
23
  throw new Error(`Not implemented for Viewport Type: ${viewportType}`);
24
24
  }
25
25
  }
26
- export function scrollVolume(viewport, volumeId, delta) {
27
- const { numScrollSteps, currentStepIndex, sliceRangeInfo } = csUtils.getVolumeViewportScrollInfo(viewport, volumeId);
26
+ export function scrollVolume(viewport, volumeId, delta, scrollSlabs = false) {
27
+ const useSlabThickness = scrollSlabs;
28
+ const { numScrollSteps, currentStepIndex, sliceRangeInfo } = csUtils.getVolumeViewportScrollInfo(viewport, volumeId, useSlabThickness);
28
29
  if (!sliceRangeInfo) {
29
30
  return;
30
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utilities/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,cAAc,EACd,WAAW,EACX,MAAM,EACN,SAAS,IAAI,OAAO,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAY7B,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAAyB,EACzB,OAAsB;IAGtB,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE3D,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;KAC3E;IAED,IACE,QAAQ,YAAY,aAAa;QACjC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,EACnC;QACA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KACzD;IAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,IAAI,QAAQ,YAAY,aAAa,EAAE;QACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/D;SAAM,IAAI,QAAQ,YAAY,cAAc,EAAE;QAC7C,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KACzC;SAAM,IAAI,QAAQ,YAAY,aAAa,EAAE;QAC5C,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACxB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;KACvE;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,QAAgB,EAChB,KAAa;IAEb,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,GACxD,OAAO,CAAC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE1D,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO;KACR;IAED,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACxE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEzD,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAClE,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,KAAK,CACN,CAAC;IAEF,QAAQ,CAAC,SAAS,CAAC;QACjB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,WAAW;KACtB,CAAC,CAAC;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC;IAElB,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAElD,IACE,CAAC,gBAAgB,GAAG,cAAc,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAC3D,QAAQ,CAAC,iBAAiB,EAAE,EAC5B;QAIA,MAAM,uBAAuB,GAAG;YAC9B,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,cAAc,EAAE,QAAQ,CAAC,iBAAiB,EAAE;SAC7C,CAAC;QAEF,OAAO,CAAC,YAAY,CAClB,WAAW,EACX,MAAM,CAAC,2BAA2B,EAClC,uBAAwE,CACzE,CAAC;KACH;AACH,CAAC"}
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utilities/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,cAAc,EACd,WAAW,EACX,MAAM,EACN,SAAS,IAAI,OAAO,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAY7B,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAAyB,EACzB,OAAsB;IAGtB,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE3D,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;KAC3E;IAED,IACE,QAAQ,YAAY,aAAa;QACjC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,EACnC;QACA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KACzD;IAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEjD,IAAI,QAAQ,YAAY,aAAa,EAAE;QACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/D;SAAM,IAAI,QAAQ,YAAY,cAAc,EAAE;QAC7C,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;KACtD;SAAM,IAAI,QAAQ,YAAY,aAAa,EAAE;QAC5C,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACxB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;KACvE;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,QAAgB,EAChB,KAAa,EACb,WAAW,GAAG,KAAK;IAEnB,MAAM,gBAAgB,GAAG,WAAW,CAAC;IAErC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,GACxD,OAAO,CAAC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAE5E,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO;KACR;IAED,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACxE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEzD,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAClE,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,KAAK,CACN,CAAC;IAEF,QAAQ,CAAC,SAAS,CAAC;QACjB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,WAAW;KACtB,CAAC,CAAC;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC;IAElB,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAElD,IACE,CAAC,gBAAgB,GAAG,cAAc,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAC3D,QAAQ,CAAC,iBAAiB,EAAE,EAC5B;QAIA,MAAM,uBAAuB,GAAG;YAC9B,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,cAAc,EAAE,QAAQ,CAAC,iBAAiB,EAAE;SAC7C,CAAC;QAEF,OAAO,CAAC,YAAY,CAClB,WAAW,EACX,MAAM,CAAC,2BAA2B,EAClC,uBAAwE,CACzE,CAAC;KACH;AACH,CAAC"}
@@ -2,7 +2,7 @@ import mouseEventListeners from './mouse';
2
2
  import touchEventListeners from './touch';
3
3
  import wheelEventListener from './wheel';
4
4
  import keyEventListener from './keyboard';
5
- import { segmentationDataModifiedEventListener, segmentationRepresentationModifiedEventListener, segmentationRepresentationRemovedEventListener, segmentationModifiedListener } from './segmentation';
5
+ import { segmentationDataModifiedEventListener, segmentationRepresentationModifiedEventListener, segmentationRepresentationRemovedEventListener, segmentationModifiedListener, imageChangeEventListener } from './segmentation';
6
6
  import { annotationSelectionListener, annotationModifiedListener } from './annotations';
7
- export { mouseEventListeners, touchEventListeners, wheelEventListener, keyEventListener, segmentationRepresentationModifiedEventListener, segmentationModifiedListener, segmentationRepresentationRemovedEventListener, segmentationDataModifiedEventListener, annotationSelectionListener, annotationModifiedListener, };
7
+ export { mouseEventListeners, touchEventListeners, wheelEventListener, keyEventListener, segmentationRepresentationModifiedEventListener, segmentationModifiedListener, segmentationRepresentationRemovedEventListener, segmentationDataModifiedEventListener, imageChangeEventListener, annotationSelectionListener, annotationModifiedListener, };
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/eventListeners/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,SAAS,CAAC;AAC1C,OAAO,mBAAmB,MAAM,SAAS,CAAC;AAC1C,OAAO,kBAAkB,MAAM,SAAS,CAAC;AACzC,OAAO,gBAAgB,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,qCAAqC,EACrC,+CAA+C,EAC/C,8CAA8C,EAC9C,4BAA4B,EAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,+CAA+C,EAC/C,4BAA4B,EAC5B,8CAA8C,EAC9C,qCAAqC,EACrC,2BAA2B,EAC3B,0BAA0B,GAC3B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/eventListeners/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,SAAS,CAAC;AAC1C,OAAO,mBAAmB,MAAM,SAAS,CAAC;AAC1C,OAAO,kBAAkB,MAAM,SAAS,CAAC;AACzC,OAAO,gBAAgB,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,qCAAqC,EACrC,+CAA+C,EAC/C,8CAA8C,EAC9C,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,+CAA+C,EAC/C,4BAA4B,EAC5B,8CAA8C,EAC9C,qCAAqC,EACrC,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,GAC3B,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ enable: (element: HTMLDivElement) => void;
3
+ disable: (element: HTMLDivElement) => void;
4
+ };
5
+ export default _default;
6
+ //# sourceMappingURL=imageChangeEventListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageChangeEventListener.d.ts","sourceRoot":"","sources":["../../../../src/eventListeners/segmentation/imageChangeEventListener.ts"],"names":[],"mappings":";;;;AAmNA,wBAGE"}
@@ -2,5 +2,6 @@ import segmentationRepresentationModifiedEventListener from './segmentationRepre
2
2
  import segmentationDataModifiedEventListener from './segmentationDataModifiedEventListener';
3
3
  import segmentationRepresentationRemovedEventListener from './segmentationRepresentationRemovedEventListener';
4
4
  import segmentationModifiedListener from './segmentationModifiedEventListener';
5
- export { segmentationRepresentationModifiedEventListener, segmentationDataModifiedEventListener, segmentationRepresentationRemovedEventListener, segmentationModifiedListener, };
5
+ import imageChangeEventListener from './imageChangeEventListener';
6
+ export { segmentationRepresentationModifiedEventListener, segmentationDataModifiedEventListener, segmentationRepresentationRemovedEventListener, segmentationModifiedListener, imageChangeEventListener, };
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/eventListeners/segmentation/index.ts"],"names":[],"mappings":"AAAA,OAAO,+CAA+C,MAAM,mDAAmD,CAAC;AAChH,OAAO,qCAAqC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,8CAA8C,MAAM,kDAAkD,CAAC;AAC9G,OAAO,4BAA4B,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EACL,+CAA+C,EAC/C,qCAAqC,EACrC,8CAA8C,EAC9C,4BAA4B,GAC7B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/eventListeners/segmentation/index.ts"],"names":[],"mappings":"AAAA,OAAO,+CAA+C,MAAM,mDAAmD,CAAC;AAChH,OAAO,qCAAqC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,8CAA8C,MAAM,kDAAkD,CAAC;AAC9G,OAAO,4BAA4B,MAAM,qCAAqC,CAAC;AAC/E,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,EACL,+CAA+C,EAC/C,qCAAqC,EACrC,8CAA8C,EAC9C,4BAA4B,EAC5B,wBAAwB,GACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"segmentationDataModifiedEventListener.d.ts","sourceRoot":"","sources":["../../../../src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAK3E,QAAA,MAAM,0BAA0B,QACzB,iCAAiC,KACrC,IA8CF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"segmentationDataModifiedEventListener.d.ts","sourceRoot":"","sources":["../../../../src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAW3E,QAAA,MAAM,0BAA0B,QACzB,iCAAiC,KACrC,IAiGF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"addEnabledElement.d.ts","sourceRoot":"","sources":["../../../src/store/addEnabledElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAyB5C,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,GACxC,IAAI,CA6BN"}
1
+ {"version":3,"file":"addEnabledElement.d.ts","sourceRoot":"","sources":["../../../src/store/addEnabledElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AA0B5C,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,GACxC,IAAI,CA8BN"}
@@ -1 +1 @@
1
- {"version":3,"file":"removeEnabledElement.d.ts","sourceRoot":"","sources":["../../../src/store/removeEnabledElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AA4B/D,iBAAS,oBAAoB,CAC3B,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,oBAAoB,GACxD,IAAI,CAiCN;AAoED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"removeEnabledElement.d.ts","sourceRoot":"","sources":["../../../src/store/removeEnabledElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AA6B/D,iBAAS,oBAAoB,CAC3B,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,oBAAoB,GACxD,IAAI,CAmCN;AAoED,eAAe,oBAAoB,CAAC"}
@@ -9,6 +9,7 @@ declare class StackScrollMouseWheelTool extends BaseTool {
9
9
  invert: boolean;
10
10
  debounceIfNotLoaded: boolean;
11
11
  loop: boolean;
12
+ scrollSlabs: boolean;
12
13
  };
13
14
  });
14
15
  mouseWheelCallback(evt: MouseWheelEventType): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StackScrollToolMouseWheelTool.d.ts","sourceRoot":"","sources":["../../../src/tools/StackScrollToolMouseWheelTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAO1D,cAAM,yBAA0B,SAAQ,QAAQ;IAC9C,MAAM,CAAC,QAAQ,MAAC;IAEhB,cAAc,EAAE,GAAG,CAAC;gBAGlB,SAAS,KAAK,EACd,gBAAgB;;;;;;;KAOf;IAKH,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;CAiBnD;AAGD,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"StackScrollToolMouseWheelTool.d.ts","sourceRoot":"","sources":["../../../src/tools/StackScrollToolMouseWheelTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAO1D,cAAM,yBAA0B,SAAQ,QAAQ;IAC9C,MAAM,CAAC,QAAQ,MAAC;IAEhB,cAAc,EAAE,GAAG,CAAC;gBAGlB,SAAS,KAAK,EACd,gBAAgB;;;;;;;;KAQf;IAKH,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;CAkBnD;AAGD,eAAe,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CircleROITool.d.ts","sourceRoot":"","sources":["../../../../src/tools/annotation/CircleROITool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AASzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AA+BjD,OAAO,EACL,UAAU,EACV,UAAU,EAEV,eAAe,EACf,SAAS,EACT,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAsE9E,cAAM,aAAc,SAAQ,cAAc;IACxC,MAAM,CAAC,QAAQ,MAAC;IAEhB,iBAAiB,EAAE,GAAG,CAAC;IACvB,iBAAiB,EAAE,GAAG,CAAC;IACvB,8BAA8B,EAAE,GAAG,CAAC;IACpC,QAAQ,EAAE;QACR,UAAU,EAAE,GAAG,CAAC;QAChB,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,UAAS;gBAG3B,SAAS,GAAE,eAAoB,EAC/B,gBAAgB,GAAE,SAWjB;IAmBH,gBAAgB,QACT,WAAW,oBAAoB,KACnC,mBAAmB,CA8EpB;IAaF,eAAe,YACJ,cAAc,cACX,mBAAmB,yCAEpB,MAAM,KAChB,OAAO,CAyBR;IAEF,oBAAoB,QACb,WAAW,oBAAoB,cACxB,mBAAmB,KAC9B,IAAI,CA2BL;IAEF,sBAAsB,QACf,WAAW,oBAAoB,cACxB,mBAAmB,UACvB,UAAU,KACjB,IAAI,CAwCL;IAEF,YAAY,QAAS,WAAW,oBAAoB,KAAG,IAAI,CAgDzD;IAEF,iBAAiB,QAAS,WAAW,oBAAoB,KAAG,IAAI,CAwB9D;IAEF,mBAAmB,QAAS,WAAW,oBAAoB,KAAG,IAAI,CA2ChE;IAEF,WAAW,QAAS,WAAW,oBAAoB,KAAG,IAAI,CAmCxD;IAEF,MAAM,YAAa,cAAc,SAmC/B;IAEF,eAAe,yBAUb;IAEF,iBAAiB,yBAUf;IAEF,aAAa,yBAWX;IAEF,eAAe,yBAWb;IAUF,gBAAgB,mBACE,MAAM,eAAe,oBACnB,gBAAgB,KACjC,OAAO,CAoPR;IAEF,qBAAqB,qFAiKnB;IAEF,eAAe,yDAKb;CACH;AAiDD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"CircleROITool.d.ts","sourceRoot":"","sources":["../../../../src/tools/annotation/CircleROITool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AASzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AA+BjD,OAAO,EACL,UAAU,EACV,UAAU,EAEV,eAAe,EACf,SAAS,EACT,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAmE9E,cAAM,aAAc,SAAQ,cAAc;IACxC,MAAM,CAAC,QAAQ,MAAC;IAEhB,iBAAiB,EAAE,GAAG,CAAC;IACvB,iBAAiB,EAAE,GAAG,CAAC;IACvB,8BAA8B,EAAE,GAAG,CAAC;IACpC,QAAQ,EAAE;QACR,UAAU,EAAE,GAAG,CAAC;QAChB,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,UAAS;gBAG3B,SAAS,GAAE,eAAoB,EAC/B,gBAAgB,GAAE,SAWjB;IAmBH,gBAAgB,QACT,WAAW,oBAAoB,KACnC,mBAAmB,CA8EpB;IAaF,eAAe,YACJ,cAAc,cACX,mBAAmB,yCAEpB,MAAM,KAChB,OAAO,CAyBR;IAEF,oBAAoB,QACb,WAAW,oBAAoB,cACxB,mBAAmB,KAC9B,IAAI,CA2BL;IAEF,sBAAsB,QACf,WAAW,oBAAoB,cACxB,mBAAmB,UACvB,UAAU,KACjB,IAAI,CAwCL;IAEF,YAAY,QAAS,WAAW,oBAAoB,KAAG,IAAI,CAgDzD;IAEF,iBAAiB,QAAS,WAAW,oBAAoB,KAAG,IAAI,CAwB9D;IAEF,mBAAmB,QAAS,WAAW,oBAAoB,KAAG,IAAI,CA2ChE;IAEF,WAAW,QAAS,WAAW,oBAAoB,KAAG,IAAI,CAmCxD;IAEF,MAAM,YAAa,cAAc,SAmC/B;IAEF,eAAe,yBAUb;IAEF,iBAAiB,yBAUf;IAEF,aAAa,yBAWX;IAEF,eAAe,yBAWb;IAUF,gBAAgB,mBACE,MAAM,eAAe,oBACnB,gBAAgB,KACjC,OAAO,CAoPR;IAEF,qBAAqB,qFAoKnB;IAEF,eAAe,yDAKb;CACH;AAiDD,eAAe,aAAa,CAAC"}
@@ -1,3 +1,4 @@
1
- declare function addLabelmapToElement(element: HTMLDivElement, volumeId: string, segmentationRepresentationUID: string): Promise<void>;
1
+ import { LabelmapSegmentationData } from '../../../types/LabelmapTypes';
2
+ declare function addLabelmapToElement(element: HTMLDivElement, labelMapData: LabelmapSegmentationData, segmentationRepresentationUID: string): Promise<void>;
2
3
  export default addLabelmapToElement;
3
4
  //# sourceMappingURL=addLabelmapToElement.d.ts.map