@cornerstonejs/tools 1.32.3 → 1.34.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 (260) 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/SynchronizerManager/Synchronizer.d.ts +1 -0
  13. package/dist/cjs/store/SynchronizerManager/Synchronizer.js +17 -1
  14. package/dist/cjs/store/SynchronizerManager/Synchronizer.js.map +1 -1
  15. package/dist/cjs/store/addEnabledElement.js +1 -0
  16. package/dist/cjs/store/addEnabledElement.js.map +1 -1
  17. package/dist/cjs/store/removeEnabledElement.js +2 -0
  18. package/dist/cjs/store/removeEnabledElement.js.map +1 -1
  19. package/dist/cjs/synchronizers/callbacks/areViewportsCoplanar .d.ts +1 -1
  20. package/dist/cjs/synchronizers/callbacks/areViewportsCoplanar .js.map +1 -1
  21. package/dist/cjs/synchronizers/callbacks/{stackImageSyncCallback.d.ts → imageSliceSyncCallback.d.ts} +1 -1
  22. package/dist/cjs/synchronizers/callbacks/{stackImageSyncCallback.js → imageSliceSyncCallback.js} +8 -4
  23. package/dist/cjs/synchronizers/callbacks/{stackImageSyncCallback.js.map → imageSliceSyncCallback.js.map} +1 -1
  24. package/dist/cjs/synchronizers/index.d.ts +3 -2
  25. package/dist/cjs/synchronizers/index.js +5 -3
  26. package/dist/cjs/synchronizers/index.js.map +1 -1
  27. package/dist/cjs/synchronizers/synchronizers/{createStackImageSynchronizer.d.ts → createImageSliceSynchronizer.d.ts} +1 -1
  28. package/dist/cjs/synchronizers/synchronizers/createImageSliceSynchronizer.js +17 -0
  29. package/dist/cjs/synchronizers/synchronizers/createImageSliceSynchronizer.js.map +1 -0
  30. package/dist/cjs/synchronizers/synchronizers/index.d.ts +3 -2
  31. package/dist/cjs/synchronizers/synchronizers/index.js +5 -3
  32. package/dist/cjs/synchronizers/synchronizers/index.js.map +1 -1
  33. package/dist/cjs/tools/annotation/CircleROITool.js +3 -1
  34. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  35. package/dist/cjs/tools/annotation/EllipticalROITool.js +1 -1
  36. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  37. package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -1
  38. package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.js +23 -10
  39. package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.js.map +1 -1
  40. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
  41. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +36 -22
  42. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  43. package/dist/cjs/tools/displayTools/Labelmap/validateRepresentationData.js +6 -5
  44. package/dist/cjs/tools/displayTools/Labelmap/validateRepresentationData.js.map +1 -1
  45. package/dist/cjs/tools/segmentation/BrushTool.js +40 -45
  46. package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
  47. package/dist/cjs/tools/segmentation/CircleScissorsTool.d.ts +4 -2
  48. package/dist/cjs/tools/segmentation/CircleScissorsTool.js +18 -17
  49. package/dist/cjs/tools/segmentation/CircleScissorsTool.js.map +1 -1
  50. package/dist/cjs/tools/segmentation/PaintFillTool.js +28 -5
  51. package/dist/cjs/tools/segmentation/PaintFillTool.js.map +1 -1
  52. package/dist/cjs/tools/segmentation/RectangleScissorsTool.d.ts +3 -1
  53. package/dist/cjs/tools/segmentation/RectangleScissorsTool.js +15 -16
  54. package/dist/cjs/tools/segmentation/RectangleScissorsTool.js.map +1 -1
  55. package/dist/cjs/tools/segmentation/SphereScissorsTool.d.ts +4 -2
  56. package/dist/cjs/tools/segmentation/SphereScissorsTool.js +20 -20
  57. package/dist/cjs/tools/segmentation/SphereScissorsTool.js.map +1 -1
  58. package/dist/cjs/tools/segmentation/strategies/eraseCircle.d.ts +2 -10
  59. package/dist/cjs/tools/segmentation/strategies/eraseCircle.js.map +1 -1
  60. package/dist/cjs/tools/segmentation/strategies/eraseRectangle.d.ts +4 -8
  61. package/dist/cjs/tools/segmentation/strategies/eraseRectangle.js +4 -20
  62. package/dist/cjs/tools/segmentation/strategies/eraseRectangle.js.map +1 -1
  63. package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -10
  64. package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  65. package/dist/cjs/tools/segmentation/strategies/fillCircle.d.ts +3 -11
  66. package/dist/cjs/tools/segmentation/strategies/fillCircle.js +57 -32
  67. package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
  68. package/dist/cjs/tools/segmentation/strategies/fillRectangle.d.ts +2 -7
  69. package/dist/cjs/tools/segmentation/strategies/fillRectangle.js +16 -8
  70. package/dist/cjs/tools/segmentation/strategies/fillRectangle.js.map +1 -1
  71. package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +2 -10
  72. package/dist/cjs/tools/segmentation/strategies/fillSphere.js +31 -17
  73. package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
  74. package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.d.ts +9 -0
  75. package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js +43 -0
  76. package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -0
  77. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +2 -2
  78. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js +2 -2
  79. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
  80. package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +5 -0
  81. package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.js +13 -0
  82. package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.js.map +1 -0
  83. package/dist/cjs/types/LabelmapToolOperationData.d.ts +14 -0
  84. package/dist/cjs/types/LabelmapToolOperationData.js +3 -0
  85. package/dist/cjs/types/LabelmapToolOperationData.js.map +1 -0
  86. package/dist/cjs/types/LabelmapTypes.d.ts +5 -1
  87. package/dist/cjs/types/index.d.ts +2 -1
  88. package/dist/cjs/utilities/math/ellipse/pointInEllipse.d.ts +7 -9
  89. package/dist/cjs/utilities/math/ellipse/pointInEllipse.js +19 -11
  90. package/dist/cjs/utilities/math/ellipse/pointInEllipse.js.map +1 -1
  91. package/dist/esm/eventListeners/index.js +2 -2
  92. package/dist/esm/eventListeners/index.js.map +1 -1
  93. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +115 -0
  94. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js.map +1 -0
  95. package/dist/esm/eventListeners/segmentation/index.js +2 -1
  96. package/dist/esm/eventListeners/segmentation/index.js.map +1 -1
  97. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +32 -6
  98. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js.map +1 -1
  99. package/dist/esm/store/SynchronizerManager/Synchronizer.js +17 -1
  100. package/dist/esm/store/SynchronizerManager/Synchronizer.js.map +1 -1
  101. package/dist/esm/store/addEnabledElement.js +2 -1
  102. package/dist/esm/store/addEnabledElement.js.map +1 -1
  103. package/dist/esm/store/removeEnabledElement.js +2 -0
  104. package/dist/esm/store/removeEnabledElement.js.map +1 -1
  105. package/dist/esm/synchronizers/callbacks/areViewportsCoplanar .js.map +1 -1
  106. package/dist/esm/synchronizers/callbacks/{stackImageSyncCallback.js → imageSliceSyncCallback.js} +8 -4
  107. package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.js.map +1 -0
  108. package/dist/esm/synchronizers/index.js +3 -2
  109. package/dist/esm/synchronizers/index.js.map +1 -1
  110. package/dist/esm/synchronizers/synchronizers/createImageSliceSynchronizer.js +11 -0
  111. package/dist/esm/synchronizers/synchronizers/createImageSliceSynchronizer.js.map +1 -0
  112. package/dist/esm/synchronizers/synchronizers/index.js +3 -2
  113. package/dist/esm/synchronizers/synchronizers/index.js.map +1 -1
  114. package/dist/esm/tools/annotation/CircleROITool.js +4 -2
  115. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  116. package/dist/esm/tools/annotation/EllipticalROITool.js +1 -1
  117. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  118. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +24 -11
  119. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js.map +1 -1
  120. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +36 -22
  121. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  122. package/dist/esm/tools/displayTools/Labelmap/validateRepresentationData.js +6 -5
  123. package/dist/esm/tools/displayTools/Labelmap/validateRepresentationData.js.map +1 -1
  124. package/dist/esm/tools/segmentation/BrushTool.js +38 -29
  125. package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
  126. package/dist/esm/tools/segmentation/CircleScissorsTool.js +27 -15
  127. package/dist/esm/tools/segmentation/CircleScissorsTool.js.map +1 -1
  128. package/dist/esm/tools/segmentation/PaintFillTool.js +28 -5
  129. package/dist/esm/tools/segmentation/PaintFillTool.js.map +1 -1
  130. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +26 -17
  131. package/dist/esm/tools/segmentation/RectangleScissorsTool.js.map +1 -1
  132. package/dist/esm/tools/segmentation/SphereScissorsTool.js +28 -17
  133. package/dist/esm/tools/segmentation/SphereScissorsTool.js.map +1 -1
  134. package/dist/esm/tools/segmentation/strategies/eraseCircle.js.map +1 -1
  135. package/dist/esm/tools/segmentation/strategies/eraseRectangle.js +4 -20
  136. package/dist/esm/tools/segmentation/strategies/eraseRectangle.js.map +1 -1
  137. package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  138. package/dist/esm/tools/segmentation/strategies/fillCircle.js +56 -31
  139. package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
  140. package/dist/esm/tools/segmentation/strategies/fillRectangle.js +16 -8
  141. package/dist/esm/tools/segmentation/strategies/fillRectangle.js.map +1 -1
  142. package/dist/esm/tools/segmentation/strategies/fillSphere.js +32 -18
  143. package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
  144. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +40 -0
  145. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -0
  146. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js +2 -2
  147. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
  148. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js +9 -0
  149. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js.map +1 -0
  150. package/dist/esm/types/LabelmapToolOperationData.js +2 -0
  151. package/dist/esm/types/LabelmapToolOperationData.js.map +1 -0
  152. package/dist/esm/utilities/math/ellipse/pointInEllipse.js +19 -11
  153. package/dist/esm/utilities/math/ellipse/pointInEllipse.js.map +1 -1
  154. package/dist/types/eventListeners/index.d.ts +2 -2
  155. package/dist/types/eventListeners/index.d.ts.map +1 -1
  156. package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts +6 -0
  157. package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts.map +1 -0
  158. package/dist/types/eventListeners/segmentation/index.d.ts +2 -1
  159. package/dist/types/eventListeners/segmentation/index.d.ts.map +1 -1
  160. package/dist/types/eventListeners/segmentation/segmentationDataModifiedEventListener.d.ts.map +1 -1
  161. package/dist/types/store/SynchronizerManager/Synchronizer.d.ts +1 -0
  162. package/dist/types/store/SynchronizerManager/Synchronizer.d.ts.map +1 -1
  163. package/dist/types/store/addEnabledElement.d.ts.map +1 -1
  164. package/dist/types/store/removeEnabledElement.d.ts.map +1 -1
  165. package/dist/types/synchronizers/callbacks/areViewportsCoplanar .d.ts +1 -1
  166. package/dist/types/synchronizers/callbacks/areViewportsCoplanar .d.ts.map +1 -1
  167. package/dist/types/synchronizers/callbacks/{stackImageSyncCallback.d.ts → imageSliceSyncCallback.d.ts} +2 -2
  168. package/dist/types/synchronizers/callbacks/imageSliceSyncCallback.d.ts.map +1 -0
  169. package/dist/types/synchronizers/index.d.ts +3 -2
  170. package/dist/types/synchronizers/index.d.ts.map +1 -1
  171. package/dist/types/synchronizers/synchronizers/createImageSliceSynchronizer.d.ts +3 -0
  172. package/dist/types/synchronizers/synchronizers/createImageSliceSynchronizer.d.ts.map +1 -0
  173. package/dist/types/synchronizers/synchronizers/index.d.ts +3 -2
  174. package/dist/types/synchronizers/synchronizers/index.d.ts.map +1 -1
  175. package/dist/types/tools/annotation/CircleROITool.d.ts.map +1 -1
  176. package/dist/types/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -1
  177. package/dist/types/tools/displayTools/Labelmap/addLabelmapToElement.d.ts.map +1 -1
  178. package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
  179. package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts.map +1 -1
  180. package/dist/types/tools/displayTools/Labelmap/validateRepresentationData.d.ts.map +1 -1
  181. package/dist/types/tools/segmentation/BrushTool.d.ts.map +1 -1
  182. package/dist/types/tools/segmentation/CircleScissorsTool.d.ts +4 -2
  183. package/dist/types/tools/segmentation/CircleScissorsTool.d.ts.map +1 -1
  184. package/dist/types/tools/segmentation/PaintFillTool.d.ts.map +1 -1
  185. package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts +3 -1
  186. package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts.map +1 -1
  187. package/dist/types/tools/segmentation/SphereScissorsTool.d.ts +4 -2
  188. package/dist/types/tools/segmentation/SphereScissorsTool.d.ts.map +1 -1
  189. package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts +2 -10
  190. package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts.map +1 -1
  191. package/dist/types/tools/segmentation/strategies/eraseRectangle.d.ts +4 -8
  192. package/dist/types/tools/segmentation/strategies/eraseRectangle.d.ts.map +1 -1
  193. package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts +2 -10
  194. package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts.map +1 -1
  195. package/dist/types/tools/segmentation/strategies/fillCircle.d.ts +3 -11
  196. package/dist/types/tools/segmentation/strategies/fillCircle.d.ts.map +1 -1
  197. package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts +2 -7
  198. package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts.map +1 -1
  199. package/dist/types/tools/segmentation/strategies/fillSphere.d.ts +2 -10
  200. package/dist/types/tools/segmentation/strategies/fillSphere.d.ts.map +1 -1
  201. package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts +10 -0
  202. package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts.map +1 -0
  203. package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +2 -2
  204. package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts.map +1 -1
  205. package/dist/types/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +6 -0
  206. package/dist/types/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts.map +1 -0
  207. package/dist/types/types/LabelmapToolOperationData.d.ts +15 -0
  208. package/dist/types/types/LabelmapToolOperationData.d.ts.map +1 -0
  209. package/dist/types/types/LabelmapTypes.d.ts +5 -1
  210. package/dist/types/types/LabelmapTypes.d.ts.map +1 -1
  211. package/dist/types/types/index.d.ts +2 -1
  212. package/dist/types/types/index.d.ts.map +1 -1
  213. package/dist/types/utilities/math/ellipse/pointInEllipse.d.ts +7 -9
  214. package/dist/types/utilities/math/ellipse/pointInEllipse.d.ts.map +1 -1
  215. package/dist/umd/index.js +1 -1
  216. package/dist/umd/index.js.map +1 -1
  217. package/package.json +3 -3
  218. package/src/eventListeners/index.ts +2 -0
  219. package/src/eventListeners/segmentation/imageChangeEventListener.ts +215 -0
  220. package/src/eventListeners/segmentation/index.ts +2 -0
  221. package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +70 -9
  222. package/src/store/SynchronizerManager/Synchronizer.ts +28 -3
  223. package/src/store/addEnabledElement.ts +2 -0
  224. package/src/store/removeEnabledElement.ts +3 -0
  225. package/src/synchronizers/callbacks/areViewportsCoplanar .ts +2 -2
  226. package/src/synchronizers/callbacks/{stackImageSyncCallback.ts → imageSliceSyncCallback.ts} +16 -8
  227. package/src/synchronizers/index.ts +5 -1
  228. package/src/synchronizers/synchronizers/{createStackImageSynchronizer.ts → createImageSliceSynchronizer.ts} +8 -5
  229. package/src/synchronizers/synchronizers/index.ts +4 -1
  230. package/src/tools/annotation/CircleROITool.ts +5 -5
  231. package/src/tools/annotation/EllipticalROITool.ts +1 -1
  232. package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +51 -22
  233. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +65 -35
  234. package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +17 -11
  235. package/src/tools/segmentation/BrushTool.ts +78 -39
  236. package/src/tools/segmentation/CircleScissorsTool.ts +46 -29
  237. package/src/tools/segmentation/PaintFillTool.ts +45 -8
  238. package/src/tools/segmentation/RectangleScissorsTool.ts +41 -31
  239. package/src/tools/segmentation/SphereScissorsTool.ts +46 -28
  240. package/src/tools/segmentation/strategies/eraseCircle.ts +3 -11
  241. package/src/tools/segmentation/strategies/eraseRectangle.ts +13 -42
  242. package/src/tools/segmentation/strategies/eraseSphere.ts +2 -10
  243. package/src/tools/segmentation/strategies/fillCircle.ts +93 -61
  244. package/src/tools/segmentation/strategies/fillRectangle.ts +31 -22
  245. package/src/tools/segmentation/strategies/fillSphere.ts +51 -41
  246. package/src/tools/segmentation/strategies/utils/getStrategyData.ts +58 -0
  247. package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +3 -2
  248. package/src/tools/segmentation/strategies/utils/stackVolumeCheck.ts +33 -0
  249. package/src/types/LabelmapToolOperationData.ts +27 -0
  250. package/src/types/LabelmapTypes.ts +16 -1
  251. package/src/types/index.ts +8 -0
  252. package/src/utilities/math/ellipse/pointInEllipse.ts +43 -22
  253. package/dist/cjs/synchronizers/synchronizers/createStackImageSynchronizer.js +0 -15
  254. package/dist/cjs/synchronizers/synchronizers/createStackImageSynchronizer.js.map +0 -1
  255. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +0 -1
  256. package/dist/esm/synchronizers/synchronizers/createStackImageSynchronizer.js +0 -9
  257. package/dist/esm/synchronizers/synchronizers/createStackImageSynchronizer.js.map +0 -1
  258. package/dist/types/synchronizers/callbacks/stackImageSyncCallback.d.ts.map +0 -1
  259. package/dist/types/synchronizers/synchronizers/createStackImageSynchronizer.d.ts +0 -3
  260. package/dist/types/synchronizers/synchronizers/createStackImageSynchronizer.d.ts.map +0 -1
@@ -7,7 +7,7 @@ import type { Types } from '@cornerstonejs/core';
7
7
 
8
8
  import { BaseTool } from '../base';
9
9
  import { PublicToolProps, ToolProps, EventTypes } from '../../types';
10
-
10
+ import { SegmentationRepresentations } from '../../enums';
11
11
  import { triggerSegmentationDataModified } from '../../stateManagement/segmentation/triggerSegmentationEvents';
12
12
  import {
13
13
  segmentLocking,
@@ -17,7 +17,11 @@ import {
17
17
  import floodFill from '../../utilities/segmentation/floodFill';
18
18
  import { getSegmentation } from '../../stateManagement/segmentation/segmentationState';
19
19
  import { FloodFillResult, FloodFillGetter } from '../../types';
20
- import { LabelmapSegmentationData } from '../../types/LabelmapTypes';
20
+ import {
21
+ LabelmapSegmentationDataStack,
22
+ LabelmapSegmentationDataVolume,
23
+ } from '../../types/LabelmapTypes';
24
+ import { isVolumeSegmentation } from './strategies/utils/stackVolumeCheck';
21
25
 
22
26
  const { transformWorldToIndex, isEqual } = csUtils;
23
27
 
@@ -83,12 +87,45 @@ class PaintFillTool extends BaseTool {
83
87
  segmentLocking.getLockedSegments(segmentationId);
84
88
  const { representationData } = getSegmentation(segmentationId);
85
89
 
86
- const { volumeId } = representationData[type] as LabelmapSegmentationData;
87
- const segmentation = cache.getVolume(volumeId);
88
- const { dimensions, direction } = segmentation;
89
- const scalarData = segmentation.getScalarData();
90
+ const labelmapData =
91
+ representationData[SegmentationRepresentations.Labelmap];
92
+
93
+ let dimensions: Types.Point3;
94
+ let direction: Types.Mat3;
95
+ let scalarData: Types.PixelDataTypedArray;
96
+ let index: Types.Point3;
97
+
98
+ if (isVolumeSegmentation(labelmapData)) {
99
+ const { volumeId } = representationData[
100
+ type
101
+ ] as LabelmapSegmentationDataVolume;
102
+
103
+ const segmentation = cache.getVolume(volumeId);
104
+ ({ dimensions, direction } = segmentation);
105
+ scalarData = segmentation.getScalarData();
90
106
 
91
- const index = transformWorldToIndex(segmentation.imageData, worldPos);
107
+ index = transformWorldToIndex(segmentation.imageData, worldPos);
108
+ } else {
109
+ const { imageIdReferenceMap } =
110
+ labelmapData as LabelmapSegmentationDataStack;
111
+
112
+ const currentImageId = enabledElement.viewport.getCurrentImageId();
113
+ const currentSegmentationImageId =
114
+ imageIdReferenceMap.get(currentImageId);
115
+
116
+ if (!currentSegmentationImageId) {
117
+ throw new Error(
118
+ 'No active segmentation imageId detected, create one before using scissors tool'
119
+ );
120
+ }
121
+
122
+ const segmentationImage = cache.getImage(currentSegmentationImageId);
123
+ scalarData = segmentationImage.getPixelData();
124
+ const { imageData } = viewport.getImageData();
125
+ dimensions = imageData.getDimensions();
126
+ direction = imageData.getDirection();
127
+ index = transformWorldToIndex(imageData, worldPos);
128
+ }
92
129
 
93
130
  const fixedDimension = this.getFixedDimension(
94
131
  viewPlaneNormal,
@@ -190,7 +227,7 @@ class PaintFillTool extends BaseTool {
190
227
  };
191
228
 
192
229
  private generateHelpers = (
193
- scalarData: Float32Array | Uint8Array | Uint16Array | Int16Array,
230
+ scalarData: Types.PixelDataTypedArray,
194
231
  dimensions: Types.Point3,
195
232
  seedIndex3D: Types.Point3,
196
233
  fixedDimension = 2
@@ -12,12 +12,16 @@ import { fillInsideRectangle } from './strategies/fillRectangle';
12
12
  import { eraseInsideRectangle } from './strategies/eraseRectangle';
13
13
  import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
14
14
 
15
- import { Events } from '../../enums';
15
+ import { Events, SegmentationRepresentations } from '../../enums';
16
16
  import { drawRect as drawRectSvg } from '../../drawingSvg';
17
17
  import {
18
18
  resetElementCursor,
19
19
  hideElementCursor,
20
20
  } from '../../cursors/elementCursor';
21
+ import {
22
+ LabelmapSegmentationDataStack,
23
+ LabelmapSegmentationDataVolume,
24
+ } from '../../types/LabelmapTypes';
21
25
 
22
26
  import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
23
27
  import {
@@ -29,6 +33,7 @@ import {
29
33
 
30
34
  import { getSegmentation } from '../../stateManagement/segmentation/segmentationState';
31
35
  import { LabelmapSegmentationData } from '../../types/LabelmapTypes';
36
+ import { isVolumeSegmentation } from './strategies/utils/stackVolumeCheck';
32
37
 
33
38
  /**
34
39
  * Tool for manipulating segmentation data by drawing a rectangle. It acts on the
@@ -41,9 +46,13 @@ class RectangleScissorsTool extends BaseTool {
41
46
  static toolName;
42
47
  _throttledCalculateCachedStats: any;
43
48
  editData: {
49
+ //
50
+ imageIdReferenceMap: Map<string, string>;
51
+ volumeId: string;
52
+ referencedVolumeId: string;
53
+ //
44
54
  annotation: any;
45
55
  segmentationId: string;
46
- segmentation: any;
47
56
  segmentIndex: number;
48
57
  segmentsLocked: number[];
49
58
  segmentColor: [number, number, number, number];
@@ -116,10 +125,9 @@ class RectangleScissorsTool extends BaseTool {
116
125
  );
117
126
 
118
127
  const { representationData } = getSegmentation(segmentationId);
119
-
120
- // Todo: are we going to support contour editing with rectangle scissors?
121
- const { volumeId } = representationData[type] as LabelmapSegmentationData;
122
- const segmentation = cache.getVolume(volumeId);
128
+ const labelmapData = representationData[
129
+ SegmentationRepresentations.Labelmap
130
+ ] as LabelmapSegmentationData;
123
131
 
124
132
  // Todo: Used for drawing the svg only, we might not need it at all
125
133
  const annotation = {
@@ -150,20 +158,38 @@ class RectangleScissorsTool extends BaseTool {
150
158
  element,
151
159
  this.getToolName()
152
160
  );
153
-
154
161
  this.editData = {
155
162
  annotation,
156
- segmentation,
157
163
  segmentIndex,
164
+ segmentationId,
158
165
  segmentsLocked,
159
166
  segmentColor,
160
- segmentationId,
161
167
  viewportIdsToRender,
162
168
  handleIndex: 3,
163
169
  movingTextBox: false,
164
170
  newAnnotation: true,
165
171
  hasMoved: false,
166
- };
172
+ segmentationRepresentationUID,
173
+ } as any;
174
+
175
+ if (isVolumeSegmentation(labelmapData as LabelmapSegmentationData)) {
176
+ const { volumeId } = labelmapData as LabelmapSegmentationDataVolume;
177
+ const segmentation = cache.getVolume(volumeId);
178
+
179
+ this.editData = {
180
+ ...this.editData,
181
+ volumeId,
182
+ referencedVolumeId: segmentation.referencedVolumeId,
183
+ };
184
+ } else {
185
+ const { imageIdReferenceMap } =
186
+ labelmapData as LabelmapSegmentationDataStack;
187
+
188
+ this.editData = {
189
+ ...this.editData,
190
+ imageIdReferenceMap,
191
+ };
192
+ }
167
193
 
168
194
  this._activateDraw(element);
169
195
 
@@ -257,15 +283,7 @@ class RectangleScissorsTool extends BaseTool {
257
283
  const eventDetail = evt.detail;
258
284
  const { element } = eventDetail;
259
285
 
260
- const {
261
- annotation,
262
- newAnnotation,
263
- hasMoved,
264
- segmentation,
265
- segmentationId,
266
- segmentIndex,
267
- segmentsLocked,
268
- } = this.editData;
286
+ const { annotation, newAnnotation, hasMoved } = this.editData;
269
287
  const { data } = annotation;
270
288
 
271
289
  if (newAnnotation && !hasMoved) {
@@ -279,23 +297,15 @@ class RectangleScissorsTool extends BaseTool {
279
297
  resetElementCursor(element);
280
298
 
281
299
  const enabledElement = getEnabledElement(element);
282
- const { viewport } = enabledElement;
283
-
284
- this.editData = null;
285
- this.isDrawing = false;
286
-
287
- if (viewport instanceof StackViewport) {
288
- throw new Error('Not implemented yet');
289
- }
290
300
 
291
301
  const operationData = {
302
+ ...this.editData,
292
303
  points: data.handles.points,
293
- volume: segmentation,
294
- segmentationId,
295
- segmentIndex,
296
- segmentsLocked,
297
304
  };
298
305
 
306
+ this.editData = null;
307
+ this.isDrawing = false;
308
+
299
309
  this.applyActiveStrategy(enabledElement, operationData);
300
310
  };
301
311
 
@@ -1,4 +1,4 @@
1
- import { cache, getEnabledElement, StackViewport } from '@cornerstonejs/core';
1
+ import { cache, getEnabledElement } from '@cornerstonejs/core';
2
2
  import type { Types } from '@cornerstonejs/core';
3
3
 
4
4
  import { BaseTool } from '../base';
@@ -10,7 +10,7 @@ import {
10
10
  } from '../../types';
11
11
 
12
12
  import { fillInsideSphere } from './strategies/fillSphere';
13
- import { Events } from '../../enums';
13
+ import { Events, SegmentationRepresentations } from '../../enums';
14
14
  import { drawCircle as drawCircleSvg } from '../../drawingSvg';
15
15
  import {
16
16
  resetElementCursor,
@@ -26,8 +26,12 @@ import {
26
26
  } from '../../stateManagement/segmentation';
27
27
 
28
28
  import { getSegmentation } from '../../stateManagement/segmentation/segmentationState';
29
- import { LabelmapSegmentationData } from '../../types/LabelmapTypes';
30
-
29
+ import {
30
+ LabelmapSegmentationData,
31
+ LabelmapSegmentationDataVolume,
32
+ LabelmapSegmentationDataStack,
33
+ } from '../../types/LabelmapTypes';
34
+ import { isVolumeSegmentation } from './strategies/utils/stackVolumeCheck';
31
35
  /**
32
36
  * Tool for manipulating segmentation data by drawing a sphere in 3d space. It acts on the
33
37
  * active Segmentation on the viewport (enabled element) and requires an active
@@ -40,10 +44,14 @@ class SphereScissorsTool extends BaseTool {
40
44
  static toolName;
41
45
  editData: {
42
46
  annotation: any;
43
- segmentation: any;
44
47
  segmentIndex: number;
45
48
  segmentsLocked: number[];
46
- segmentationId: string;
49
+ segmentationRepresentationUID: string;
50
+ //
51
+ volumeId: string;
52
+ referencedVolumeId: string;
53
+ imageIdReferenceMap: Map<string, string>;
54
+ //
47
55
  toolGroupId: string;
48
56
  segmentColor: [number, number, number, number];
49
57
  viewportIdsToRender: string[];
@@ -103,7 +111,7 @@ class SphereScissorsTool extends BaseTool {
103
111
  );
104
112
  }
105
113
 
106
- const { segmentationRepresentationUID, segmentationId, type } =
114
+ const { segmentationRepresentationUID, segmentationId } =
107
115
  activeSegmentationRepresentation;
108
116
  const segmentIndex =
109
117
  segmentIndexController.getActiveSegmentIndex(segmentationId);
@@ -115,12 +123,6 @@ class SphereScissorsTool extends BaseTool {
115
123
  segmentIndex
116
124
  );
117
125
 
118
- const { representationData } = getSegmentation(segmentationId);
119
-
120
- // Todo: are we going to support contour editing with rectangle scissors?
121
- const { volumeId } = representationData[type] as LabelmapSegmentationData;
122
- const segmentation = cache.getVolume(volumeId);
123
-
124
126
  this.isDrawing = true;
125
127
 
126
128
  // Used for drawing the svg only, we might not need it at all
@@ -148,19 +150,41 @@ class SphereScissorsTool extends BaseTool {
148
150
 
149
151
  this.editData = {
150
152
  annotation,
151
- segmentation,
152
153
  centerCanvas: canvasPos,
154
+ segmentationRepresentationUID,
153
155
  segmentIndex,
154
156
  segmentsLocked,
155
157
  segmentColor,
156
- segmentationId,
157
158
  toolGroupId,
158
159
  viewportIdsToRender,
159
160
  handleIndex: 3,
160
161
  movingTextBox: false,
161
162
  newAnnotation: true,
162
163
  hasMoved: false,
163
- };
164
+ } as any;
165
+
166
+ const { representationData } = getSegmentation(segmentationId);
167
+ const labelmapData =
168
+ representationData[SegmentationRepresentations.Labelmap];
169
+
170
+ if (isVolumeSegmentation(labelmapData as LabelmapSegmentationData)) {
171
+ const { volumeId } = labelmapData as LabelmapSegmentationDataVolume;
172
+ const segmentation = cache.getVolume(volumeId);
173
+
174
+ this.editData = {
175
+ ...this.editData,
176
+ volumeId,
177
+ referencedVolumeId: segmentation.referencedVolumeId,
178
+ };
179
+ } else {
180
+ const { imageIdReferenceMap } =
181
+ labelmapData as LabelmapSegmentationDataStack;
182
+
183
+ this.editData = {
184
+ ...this.editData,
185
+ imageIdReferenceMap,
186
+ };
187
+ }
164
188
 
165
189
  this._activateDraw(element);
166
190
 
@@ -227,10 +251,9 @@ class SphereScissorsTool extends BaseTool {
227
251
  annotation,
228
252
  newAnnotation,
229
253
  hasMoved,
230
- segmentation,
231
254
  segmentIndex,
255
+ segmentationRepresentationUID,
232
256
  segmentsLocked,
233
- segmentationId,
234
257
  } = this.editData;
235
258
  const { data } = annotation;
236
259
  const { viewPlaneNormal, viewUp } = annotation.metadata;
@@ -246,25 +269,20 @@ class SphereScissorsTool extends BaseTool {
246
269
  resetElementCursor(element);
247
270
 
248
271
  const enabledElement = getEnabledElement(element);
249
- const { viewport } = enabledElement;
250
-
251
- this.editData = null;
252
- this.isDrawing = false;
253
-
254
- if (viewport instanceof StackViewport) {
255
- throw new Error('Not implemented yet');
256
- }
257
272
 
258
273
  const operationData = {
274
+ ...this.editData,
259
275
  points: data.handles.points,
260
- volume: segmentation,
261
276
  segmentIndex,
277
+ segmentationRepresentationUID,
262
278
  segmentsLocked,
263
- segmentationId,
264
279
  viewPlaneNormal,
265
280
  viewUp,
266
281
  };
267
282
 
283
+ this.editData = null;
284
+ this.isDrawing = false;
285
+
268
286
  this.applyActiveStrategy(enabledElement, operationData);
269
287
  };
270
288
 
@@ -1,18 +1,10 @@
1
1
  import type { Types } from '@cornerstonejs/core';
2
2
 
3
3
  import { fillInsideCircle } from './fillCircle';
4
+ import { LabelmapToolOperationData } from '../../../types';
4
5
 
5
- type OperationData = {
6
- segmentationId: string;
7
- imageVolume: Types.IImageVolume;
8
- points: any; // Todo:fix
9
- volume: Types.IImageVolume;
10
- segmentIndex: number;
11
- segmentsLocked: number[];
12
- viewPlaneNormal: number[];
13
- viewUp: number[];
14
- strategySpecificConfiguration: any;
15
- constraintFn: () => boolean;
6
+ type OperationData = LabelmapToolOperationData & {
7
+ points: any; // todo fix
16
8
  };
17
9
 
18
10
  export function eraseInsideCircle(
@@ -1,64 +1,35 @@
1
- import { ImageVolume, utilities as csUtils } from '@cornerstonejs/core';
2
1
  import type { Types } from '@cornerstonejs/core';
3
2
 
4
- import { getBoundingBoxAroundShape } from '../../../utilities/boundingBox';
5
- import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
6
- import { pointInShapeCallback } from '../../../utilities';
3
+ import { LabelmapToolOperationData } from '../../../types';
4
+ import { fillInsideRectangle } from './fillRectangle';
7
5
 
8
- const { transformWorldToIndex } = csUtils;
9
-
10
- type EraseOperationData = {
11
- segmentationId: string;
6
+ type OperationData = LabelmapToolOperationData & {
12
7
  points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
13
- volume: ImageVolume;
14
- constraintFn: (x: [number, number, number]) => boolean;
15
- segmentsLocked: number[];
16
8
  };
17
9
 
18
10
  function eraseRectangle(
19
11
  enabledElement: Types.IEnabledElement,
20
- operationData: EraseOperationData,
12
+ operationData: OperationData,
21
13
  inside = true
22
14
  ): void {
23
- const {
24
- volume: segmentation,
25
- points,
26
- segmentsLocked,
27
- segmentationId,
28
- } = operationData;
29
- const { imageData, dimensions } = segmentation;
30
- const scalarData = segmentation.getScalarData();
31
-
32
- const rectangleCornersIJK = points.map((world) => {
33
- return transformWorldToIndex(imageData, world);
15
+ // Take the arguments and set the segmentIndex to 0,
16
+ // Then use existing fillRectangle functionality.
17
+ const eraseOperationData = Object.assign({}, operationData, {
18
+ segmentIndex: 0,
34
19
  });
35
20
 
36
- const boundsIJK = getBoundingBoxAroundShape(rectangleCornersIJK, dimensions);
37
-
38
- // Since always all points inside the boundsIJK is inside the rectangle...
39
- const pointInShape = () => true;
40
-
41
- const callback = ({ value, index }) => {
42
- if (segmentsLocked.includes(value)) {
43
- return;
44
- }
45
- scalarData[index] = 0;
46
- };
47
-
48
- pointInShapeCallback(imageData, pointInShape, callback, boundsIJK);
49
-
50
- triggerSegmentationDataModified(segmentationId);
21
+ fillInsideRectangle(enabledElement, eraseOperationData);
51
22
  }
52
23
 
53
24
  /**
54
25
  * Erase the rectangle region segment inside the segmentation defined by the operationData.
55
26
  * It erases the segmentation pixels inside the defined rectangle.
56
27
  * @param enabledElement - The element for which the segment is being erased.
57
- * @param operationData - EraseOperationData
28
+ * @param operationData - OperationData
58
29
  */
59
30
  export function eraseInsideRectangle(
60
31
  enabledElement: Types.IEnabledElement,
61
- operationData: EraseOperationData
32
+ operationData: OperationData
62
33
  ): void {
63
34
  eraseRectangle(enabledElement, operationData, true);
64
35
  }
@@ -67,11 +38,11 @@ export function eraseInsideRectangle(
67
38
  * Erase the rectangle region segment inside the segmentation defined by the operationData.
68
39
  * It erases the segmentation pixels outside the defined rectangle.
69
40
  * @param enabledElement - The element for which the segment is being erased.
70
- * @param operationData - EraseOperationData
41
+ * @param operationData - OperationData
71
42
  */
72
43
  export function eraseOutsideRectangle(
73
44
  enabledElement: Types.IEnabledElement,
74
- operationData: EraseOperationData
45
+ operationData: OperationData
75
46
  ): void {
76
47
  eraseRectangle(enabledElement, operationData, false);
77
48
  }
@@ -1,18 +1,10 @@
1
1
  import type { Types } from '@cornerstonejs/core';
2
2
 
3
3
  import { fillInsideSphere } from './fillSphere';
4
+ import { LabelmapToolOperationData } from '../../../types';
4
5
 
5
- type OperationData = {
6
+ type OperationData = LabelmapToolOperationData & {
6
7
  points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
7
- imageVolume: Types.IImageVolume;
8
- volume: Types.IImageVolume;
9
- segmentIndex: number;
10
- segmentationId: string;
11
- segmentsLocked: number[];
12
- viewPlaneNormal: Types.Point3;
13
- viewUp: Types.Point3;
14
- constraintFn: () => boolean;
15
- strategySpecificConfiguration: any;
16
8
  };
17
9
 
18
10
  export function eraseInsideSphere(