@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/tools",
3
- "version": "1.32.3",
3
+ "version": "1.34.0",
4
4
  "description": "Cornerstone3D Tools",
5
5
  "main": "src/index.ts",
6
6
  "types": "dist/types/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "webpack:watch": "webpack --mode development --progress --watch --config ./.webpack/webpack.dev.js"
30
30
  },
31
31
  "dependencies": {
32
- "@cornerstonejs/core": "^1.32.3",
32
+ "@cornerstonejs/core": "^1.34.0",
33
33
  "comlink": "^4.4.1",
34
34
  "lodash.clonedeep": "4.5.0",
35
35
  "lodash.get": "^4.4.2"
@@ -53,5 +53,5 @@
53
53
  "type": "individual",
54
54
  "url": "https://ohif.org/donate"
55
55
  },
56
- "gitHead": "0a00cbe4159dc323fcce9b374938f3eedf343ed1"
56
+ "gitHead": "a1bdeb0d4083453272dbca7e8c5f445d30d1fd4c"
57
57
  }
@@ -7,6 +7,7 @@ import {
7
7
  segmentationRepresentationModifiedEventListener,
8
8
  segmentationRepresentationRemovedEventListener,
9
9
  segmentationModifiedListener,
10
+ imageChangeEventListener,
10
11
  } from './segmentation';
11
12
  import {
12
13
  annotationSelectionListener,
@@ -23,6 +24,7 @@ export {
23
24
  segmentationModifiedListener,
24
25
  segmentationRepresentationRemovedEventListener,
25
26
  segmentationDataModifiedEventListener,
27
+ imageChangeEventListener,
26
28
  annotationSelectionListener,
27
29
  annotationModifiedListener,
28
30
  };
@@ -0,0 +1,215 @@
1
+ import {
2
+ StackViewport,
3
+ getEnabledElement,
4
+ Enums,
5
+ getEnabledElementByIds,
6
+ cache,
7
+ utilities,
8
+ Types,
9
+ metaData,
10
+ } from '@cornerstonejs/core';
11
+ import { getToolGroupForViewport } from '../../store/ToolGroupManager';
12
+ import Representations from '../../enums/SegmentationRepresentations';
13
+ import * as SegmentationState from '../../stateManagement/segmentation/segmentationState';
14
+ import { LabelmapSegmentationDataStack } from '../../types/LabelmapTypes';
15
+ import { isVolumeSegmentation } from '../../tools/segmentation/strategies/utils/stackVolumeCheck';
16
+ import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray';
17
+ import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData';
18
+ import triggerSegmentationRender from '../../utilities/segmentation/triggerSegmentationRender';
19
+
20
+ const enable = function (element: HTMLDivElement): void {
21
+ const { viewport } = getEnabledElement(element);
22
+
23
+ if (!(viewport instanceof StackViewport)) {
24
+ return;
25
+ }
26
+
27
+ element.addEventListener(
28
+ Enums.Events.STACK_NEW_IMAGE,
29
+ _imageChangeEventListener as EventListener
30
+ );
31
+ // this listener handles the segmentation modifications
32
+ element.addEventListener(
33
+ Enums.Events.IMAGE_RENDERED,
34
+ _imageChangeEventListener as EventListener
35
+ );
36
+ };
37
+
38
+ const disable = function (element: HTMLDivElement): void {
39
+ const { viewport } = getEnabledElement(element);
40
+
41
+ if (!(viewport instanceof StackViewport)) {
42
+ return;
43
+ }
44
+
45
+ element.removeEventListener(
46
+ Enums.Events.STACK_NEW_IMAGE,
47
+ _imageChangeEventListener as EventListener
48
+ );
49
+ element.removeEventListener(
50
+ Enums.Events.IMAGE_RENDERED,
51
+ _imageChangeEventListener as EventListener
52
+ );
53
+ };
54
+
55
+ /**
56
+ * When the image is rendered, check what tools can be rendered for this element.
57
+ *
58
+ * - First we get all tools which are active, passive or enabled on the element.
59
+ * - If any of these tools have a `renderAnnotation` method, then we render them.
60
+ * - Note that these tools don't necessarily have to be instances of `AnnotationTool`,
61
+ * Any tool may register a `renderAnnotation` method (e.g. a tool that displays an overlay).
62
+ *
63
+ * @param evt - The normalized IMAGE_RENDERED event.
64
+ */
65
+ function _imageChangeEventListener(evt) {
66
+ const eventData = evt.detail;
67
+ const { viewportId, renderingEngineId } = eventData;
68
+ const { viewport } = getEnabledElementByIds(
69
+ viewportId,
70
+ renderingEngineId
71
+ ) as { viewport: Types.IStackViewport };
72
+
73
+ const toolGroup = getToolGroupForViewport(viewportId, renderingEngineId);
74
+ let toolGroupSegmentationRepresentations =
75
+ SegmentationState.getSegmentationRepresentations(toolGroup.id) || [];
76
+
77
+ toolGroupSegmentationRepresentations =
78
+ toolGroupSegmentationRepresentations.filter(
79
+ (representation) => representation.type === Representations.Labelmap
80
+ );
81
+
82
+ if (!toolGroupSegmentationRepresentations?.length) {
83
+ return;
84
+ }
85
+
86
+ const segmentationRepresentations = {};
87
+ toolGroupSegmentationRepresentations.forEach((representation) => {
88
+ const segmentation = SegmentationState.getSegmentation(
89
+ representation.segmentationId
90
+ );
91
+
92
+ if (!segmentation) {
93
+ return;
94
+ }
95
+
96
+ const labelmapData =
97
+ segmentation.representationData[Representations.Labelmap];
98
+
99
+ if (isVolumeSegmentation(labelmapData)) {
100
+ return;
101
+ }
102
+
103
+ const { imageIdReferenceMap } =
104
+ labelmapData as LabelmapSegmentationDataStack;
105
+
106
+ segmentationRepresentations[representation.segmentationRepresentationUID] =
107
+ {
108
+ imageIdReferenceMap,
109
+ };
110
+ });
111
+
112
+ const representationList = Object.keys(segmentationRepresentations);
113
+ const currentImageId = viewport.getCurrentImageId();
114
+ const actors = viewport.getActors();
115
+
116
+ actors.forEach((actor) => {
117
+ if (!representationList.includes(actor.uid)) {
118
+ return;
119
+ }
120
+ const segmentationActor = actor.actor;
121
+
122
+ const { imageIdReferenceMap } = segmentationRepresentations[actor.uid];
123
+
124
+ const derivedImageId = imageIdReferenceMap.get(currentImageId);
125
+
126
+ const segmentationImageData = segmentationActor.getMapper().getInputData();
127
+
128
+ if (!derivedImageId) {
129
+ // this means that this slice doesn't have a segmentation for this representation
130
+ // this can be a case where the segmentation was added to certain slices only
131
+ // so we can keep the actor but empty out the imageData
132
+ const scalarArray = vtkDataArray.newInstance({
133
+ name: 'Pixels',
134
+ numberOfComponents: 1,
135
+ values: new Uint8Array(segmentationImageData.getNumberOfPoints()),
136
+ });
137
+
138
+ const imageData = vtkImageData.newInstance();
139
+ imageData.getPointData().setScalars(scalarArray);
140
+ segmentationActor.getMapper().setInputData(imageData);
141
+ return;
142
+ }
143
+
144
+ const derivedImage = cache.getImage(derivedImageId);
145
+
146
+ const { origin, dimensions, spacing, direction } =
147
+ viewport.getImageDataMetadata(derivedImage);
148
+
149
+ segmentationImageData.setOrigin(origin);
150
+ segmentationImageData.modified();
151
+
152
+ if (
153
+ segmentationImageData.getDimensions()[0] !== dimensions[0] ||
154
+ segmentationImageData.getDimensions()[1] !== dimensions[1]
155
+ ) {
156
+ // IMPORTANT: Not sure why we can't just update the dimensions
157
+ // and the orientation of the image data and then call modified
158
+ // I tried calling modified on everything, but seems like we should remove
159
+ // and add the actor again below
160
+ viewport.removeActors([actor.uid]);
161
+ viewport.addImages(
162
+ [
163
+ {
164
+ imageId: derivedImageId,
165
+ actorUID: actor.uid,
166
+ callback: ({ imageActor }) => {
167
+ const scalarArray = vtkDataArray.newInstance({
168
+ name: 'Pixels',
169
+ numberOfComponents: 1,
170
+ values: [...derivedImage.getPixelData()],
171
+ });
172
+
173
+ const imageData = vtkImageData.newInstance();
174
+
175
+ imageData.setDimensions(dimensions[0], dimensions[1], 1);
176
+ imageData.setSpacing(spacing);
177
+ imageData.setDirection(direction);
178
+ imageData.setOrigin(origin);
179
+ imageData.getPointData().setScalars(scalarArray);
180
+
181
+ imageActor.getMapper().setInputData(imageData);
182
+ },
183
+ },
184
+ ],
185
+ true,
186
+ false
187
+ );
188
+
189
+ triggerSegmentationRender(toolGroup.id);
190
+ return;
191
+ }
192
+
193
+ utilities.updateVTKImageDataWithCornerstoneImage(
194
+ segmentationImageData,
195
+ derivedImage
196
+ );
197
+ viewport.render();
198
+
199
+ // This is put here to make sure that the segmentation is rendered
200
+ // for the initial image as well after that we don't need it since
201
+ // stack new image is called when changing slices
202
+ if (evt.type === Enums.Events.IMAGE_RENDERED) {
203
+ // unsubscribe after the initial render
204
+ viewport.element.removeEventListener(
205
+ Enums.Events.IMAGE_RENDERED,
206
+ _imageChangeEventListener as EventListener
207
+ );
208
+ }
209
+ });
210
+ }
211
+
212
+ export default {
213
+ enable,
214
+ disable,
215
+ };
@@ -2,10 +2,12 @@ import segmentationRepresentationModifiedEventListener from './segmentationRepre
2
2
  import segmentationDataModifiedEventListener from './segmentationDataModifiedEventListener';
3
3
  import segmentationRepresentationRemovedEventListener from './segmentationRepresentationRemovedEventListener';
4
4
  import segmentationModifiedListener from './segmentationModifiedEventListener';
5
+ import imageChangeEventListener from './imageChangeEventListener';
5
6
 
6
7
  export {
7
8
  segmentationRepresentationModifiedEventListener,
8
9
  segmentationDataModifiedEventListener,
9
10
  segmentationRepresentationRemovedEventListener,
10
11
  segmentationModifiedListener,
12
+ imageChangeEventListener,
11
13
  };
@@ -1,9 +1,19 @@
1
- import { cache } from '@cornerstonejs/core';
1
+ import {
2
+ cache,
3
+ getEnabledElementByIds,
4
+ utilities as csUtils,
5
+ } from '@cornerstonejs/core';
2
6
 
3
7
  import triggerSegmentationRender from '../../utilities/segmentation/triggerSegmentationRender';
4
8
  import SegmentationRepresentations from '../../enums/SegmentationRepresentations';
5
9
  import * as SegmentationState from '../../stateManagement/segmentation/segmentationState';
6
10
  import { SegmentationDataModifiedEventType } from '../../types/EventTypes';
11
+ import {
12
+ LabelmapSegmentationDataStack,
13
+ LabelmapSegmentationDataVolume,
14
+ } from '../../types/LabelmapTypes';
15
+ import { isVolumeSegmentation } from '../../tools/segmentation/strategies/utils/stackVolumeCheck';
16
+ import { getToolGroup } from '../../store/ToolGroupManager';
7
17
 
8
18
  /** A callback function that is called when the segmentation data is modified which
9
19
  * often is as a result of tool interactions e.g., scissors, eraser, etc.
@@ -16,11 +26,19 @@ const onSegmentationDataModified = function (
16
26
  const { representationData, type } =
17
27
  SegmentationState.getSegmentation(segmentationId);
18
28
 
19
- let toolGroupIds;
20
- if (type === SegmentationRepresentations.Labelmap) {
29
+ const toolGroupIds =
30
+ SegmentationState.getToolGroupIdsWithSegmentation(segmentationId);
31
+
32
+ if (type !== SegmentationRepresentations.Labelmap) {
33
+ throw new Error(
34
+ `onSegmentationDataModified: representationType ${type} not supported yet`
35
+ );
36
+ }
37
+
38
+ if (isVolumeSegmentation(representationData[type])) {
21
39
  // get the volume from cache, we need the openGLTexture to be updated to GPU
22
40
  const segmentationVolume = cache.getVolume(
23
- representationData[type].volumeId
41
+ (representationData[type] as LabelmapSegmentationDataVolume).volumeId
24
42
  );
25
43
 
26
44
  if (!segmentationVolume) {
@@ -45,12 +63,55 @@ const onSegmentationDataModified = function (
45
63
 
46
64
  // Trigger modified on the imageData to update the image
47
65
  imageData.modified();
48
- toolGroupIds =
49
- SegmentationState.getToolGroupIdsWithSegmentation(segmentationId);
50
66
  } else {
51
- throw new Error(
52
- `onSegmentationDataModified: representationType ${type} not supported yet`
53
- );
67
+ toolGroupIds.forEach((toolGroupId) => {
68
+ const toolGroupSegmentationRepresentations =
69
+ SegmentationState.getSegmentationRepresentations(toolGroupId);
70
+
71
+ const toolGroup = getToolGroup(toolGroupId);
72
+ const viewportsInfo = toolGroup.getViewportsInfo();
73
+
74
+ toolGroupSegmentationRepresentations.forEach((representation) => {
75
+ if (representation.segmentationId !== segmentationId) {
76
+ return;
77
+ }
78
+
79
+ viewportsInfo.forEach(({ viewportId, renderingEngineId }) => {
80
+ const viewport = getEnabledElementByIds(
81
+ viewportId,
82
+ renderingEngineId
83
+ ).viewport;
84
+
85
+ const actorEntry = viewport.getActor(
86
+ representation.segmentationRepresentationUID
87
+ );
88
+
89
+ if (!actorEntry) {
90
+ return;
91
+ }
92
+
93
+ const currentImageId = viewport.getCurrentImageId();
94
+
95
+ const segImageData = actorEntry.actor.getMapper().getInputData();
96
+
97
+ const { imageIdReferenceMap } = representationData[
98
+ type
99
+ ] as LabelmapSegmentationDataStack;
100
+
101
+ const currentSegmentationImageId =
102
+ imageIdReferenceMap.get(currentImageId);
103
+
104
+ const segmentationImage = cache.getImage(currentSegmentationImageId);
105
+ segImageData.modified();
106
+
107
+ // update the cache with the new image data
108
+ csUtils.updateVTKImageDataWithCornerstoneImage(
109
+ segImageData,
110
+ segmentationImage
111
+ );
112
+ });
113
+ });
114
+ });
54
115
  }
55
116
 
56
117
  toolGroupIds.forEach((toolGroupId) => {
@@ -17,6 +17,7 @@ class Synchronizer {
17
17
  //
18
18
  private _enabled: boolean;
19
19
  private _eventName: string;
20
+ private _auxiliaryEventNames: string[];
20
21
  private _eventHandler: ISynchronizerEventHandler;
21
22
  private _ignoreFiredEvents: boolean;
22
23
  private _sourceViewports: Array<Types.IViewportId>;
@@ -38,6 +39,7 @@ class Synchronizer {
38
39
  this._sourceViewports = [];
39
40
  this._targetViewports = [];
40
41
  this._options = options || {};
42
+ this._auxiliaryEventNames = this._options.auxiliaryEventNames || [];
41
43
 
42
44
  //
43
45
  this.id = synchronizerId;
@@ -89,11 +91,26 @@ class Synchronizer {
89
91
 
90
92
  const { renderingEngineId, viewportId } = viewportInfo;
91
93
 
92
- const { element } =
94
+ const viewport =
93
95
  getRenderingEngine(renderingEngineId).getViewport(viewportId);
94
96
 
95
- // @ts-ignore
97
+ if (!viewport) {
98
+ console.warn(
99
+ `Synchronizer.addSource: No viewport for ${renderingEngineId} ${viewportId}`
100
+ );
101
+ return;
102
+ }
103
+
104
+ const element = viewport.element;
105
+
96
106
  element.addEventListener(this._eventName, this._onEvent.bind(this));
107
+
108
+ if (this._auxiliaryEventNames.length) {
109
+ this._auxiliaryEventNames.forEach((eventName) => {
110
+ element.addEventListener(eventName, this._onEvent.bind(this));
111
+ });
112
+ }
113
+
97
114
  this._updateDisableHandlers();
98
115
 
99
116
  this._sourceViewports.push(viewportInfo);
@@ -157,8 +174,16 @@ class Synchronizer {
157
174
  const element = _getViewportElement(viewportInfo);
158
175
 
159
176
  this._sourceViewports.splice(index, 1);
160
- // @ts-ignore
177
+
178
+ //@ts-ignore
161
179
  element.removeEventListener(this._eventName, this._eventHandler);
180
+
181
+ if (this._auxiliaryEventNames) {
182
+ this._auxiliaryEventNames.forEach((eventName) => {
183
+ //@ts-ignore
184
+ element.removeEventListener(eventName, this._eventHandler);
185
+ });
186
+ }
162
187
  this._updateDisableHandlers();
163
188
  }
164
189
 
@@ -4,6 +4,7 @@ import {
4
4
  wheelEventListener,
5
5
  touchEventListeners,
6
6
  keyEventListener,
7
+ imageChangeEventListener,
7
8
  } from '../eventListeners';
8
9
  import {
9
10
  imageRenderedEventDispatcher,
@@ -41,6 +42,7 @@ export default function addEnabledElement(
41
42
  wheelEventListener.enable(element);
42
43
  touchEventListeners.enable(element);
43
44
  keyEventListener.enable(element);
45
+ imageChangeEventListener.enable(element);
44
46
 
45
47
  // Dispatchers: renderer
46
48
  imageRenderedEventDispatcher.enable(element);
@@ -23,6 +23,7 @@ import { removeAnnotation } from '../stateManagement';
23
23
  import getSynchronizersForViewport from './SynchronizerManager/getSynchronizersForViewport';
24
24
  import getToolGroupForViewport from './ToolGroupManager/getToolGroupForViewport';
25
25
  import { annotationRenderingEngine } from '../utilities/triggerAnnotationRender';
26
+ import imageChangeEventListener from '../eventListeners/segmentation/imageChangeEventListener';
26
27
 
27
28
  const VIEWPORT_ELEMENT = 'viewport-element';
28
29
 
@@ -43,7 +44,9 @@ function removeEnabledElement(
43
44
  wheelEventListener.disable(element);
44
45
  touchEventListeners.disable(element);
45
46
  keyEventListener.disable(element);
47
+
46
48
  // labelmap
49
+ imageChangeEventListener.disable(element);
47
50
 
48
51
  // Dispatchers: renderer
49
52
  imageRenderedEventDispatcher.disable(element);
@@ -2,8 +2,8 @@ import { vec3 } from 'gl-matrix';
2
2
  import { Types } from '@cornerstonejs/core';
3
3
 
4
4
  export default function areViewportsCoplanar(
5
- viewport1: Types.IStackViewport,
6
- viewport2: Types.IStackViewport
5
+ viewport1: Types.IStackViewport | Types.IVolumeViewport,
6
+ viewport2: Types.IStackViewport | Types.IVolumeViewport
7
7
  ): boolean {
8
8
  const { viewPlaneNormal: viewPlaneNormal1 } = viewport1.getCamera();
9
9
  const { viewPlaneNormal: viewPlaneNormal2 } = viewport2.getCamera();
@@ -4,6 +4,7 @@ import {
4
4
  Types,
5
5
  metaData,
6
6
  utilities,
7
+ VolumeViewport,
7
8
  } from '@cornerstonejs/core';
8
9
  import { Synchronizer } from '../../store';
9
10
  import { jumpToSlice } from '../../utilities';
@@ -37,7 +38,7 @@ const getSpatialRegistration = (targetId, sourceId) =>
37
38
  * the same as sourceViewport.
38
39
  * @param cameraModifiedEvent - The CAMERA_MODIFIED event.
39
40
  */
40
- export default async function stackImageSyncCallback(
41
+ export default async function imageSliceSyncCallback(
41
42
  synchronizerInstance: Synchronizer,
42
43
  sourceViewport: Types.IViewportId,
43
44
  targetViewport: Types.IViewportId
@@ -49,9 +50,9 @@ export default async function stackImageSyncCallback(
49
50
  );
50
51
  }
51
52
 
52
- const sViewport = renderingEngine.getViewport(
53
- sourceViewport.viewportId
54
- ) as Types.IStackViewport;
53
+ const sViewport = renderingEngine.getViewport(sourceViewport.viewportId) as
54
+ | Types.IVolumeViewport
55
+ | Types.IStackViewport;
55
56
 
56
57
  const options = synchronizerInstance.getOptions(targetViewport.viewportId);
57
58
 
@@ -59,9 +60,9 @@ export default async function stackImageSyncCallback(
59
60
  return;
60
61
  }
61
62
 
62
- const tViewport = renderingEngine.getViewport(
63
- targetViewport.viewportId
64
- ) as Types.IStackViewport;
63
+ const tViewport = renderingEngine.getViewport(targetViewport.viewportId) as
64
+ | Types.IVolumeViewport
65
+ | Types.IStackViewport;
65
66
 
66
67
  const imageId1 = sViewport.getCurrentImageId();
67
68
  const imagePlaneModule1 = metaData.get('imagePlaneModule', imageId1);
@@ -116,12 +117,19 @@ export default async function stackImageSyncCallback(
116
117
  targetImageIds
117
118
  );
118
119
 
120
+ let imageIndexToSet = closestImageIdIndex2.index;
121
+ if (tViewport instanceof VolumeViewport) {
122
+ // since in case of volume viewport our stack is reversed, we should
123
+ // reverse the index as well
124
+ imageIndexToSet = targetImageIds.length - closestImageIdIndex2.index - 1;
125
+ }
126
+
119
127
  if (
120
128
  closestImageIdIndex2.index !== -1 &&
121
129
  tViewport.getCurrentImageIdIndex() !== closestImageIdIndex2.index
122
130
  ) {
123
131
  await jumpToSlice(tViewport.element, {
124
- imageIndex: closestImageIdIndex2.index,
132
+ imageIndex: imageIndexToSet,
125
133
  });
126
134
  }
127
135
  }
@@ -1,11 +1,15 @@
1
1
  import createCameraPositionSynchronizer from './synchronizers/createCameraPositionSynchronizer';
2
2
  import createVOISynchronizer from './synchronizers/createVOISynchronizer';
3
3
  import createZoomPanSynchronizer from './synchronizers/createZoomPanSynchronizer';
4
- import createStackImageSynchronizer from './synchronizers/createStackImageSynchronizer';
4
+ import createImageSliceSynchronizer from './synchronizers/createImageSliceSynchronizer';
5
+
6
+ // for backward compatibility
7
+ const createStackImageSynchronizer = createImageSliceSynchronizer;
5
8
 
6
9
  export {
7
10
  createCameraPositionSynchronizer,
8
11
  createVOISynchronizer,
9
12
  createZoomPanSynchronizer,
13
+ createImageSliceSynchronizer,
10
14
  createStackImageSynchronizer,
11
15
  };
@@ -1,24 +1,27 @@
1
1
  import { createSynchronizer } from '../../store/SynchronizerManager';
2
2
  import { Enums } from '@cornerstonejs/core';
3
- import stackImageSyncCallback from '../callbacks/stackImageSyncCallback';
3
+ import imageSliceSyncCallback from '../callbacks/imageSliceSyncCallback';
4
4
  import Synchronizer from '../../store/SynchronizerManager/Synchronizer';
5
5
 
6
- const { STACK_NEW_IMAGE } = Enums.Events;
6
+ const { STACK_NEW_IMAGE, VOLUME_NEW_IMAGE } = Enums.Events;
7
7
 
8
8
  /**
9
9
  * A helper that creates a new `Synchronizer` which listens to the `STACK_NEW_IMAGE`
10
- * rendering event and calls the `stackImageSyncCallback`.
10
+ * rendering event and calls the `ImageSliceSyncCallback`.
11
11
  *
12
12
  * @param synchronizerName - The name of the synchronizer.
13
13
  * @returns A new `Synchronizer` instance.
14
14
  */
15
- export default function createStackImageSynchronizer(
15
+ export default function createImageSliceSynchronizer(
16
16
  synchronizerName: string
17
17
  ): Synchronizer {
18
18
  const stackImageSynchronizer = createSynchronizer(
19
19
  synchronizerName,
20
20
  STACK_NEW_IMAGE,
21
- stackImageSyncCallback
21
+ imageSliceSyncCallback,
22
+ {
23
+ auxiliaryEventNames: [VOLUME_NEW_IMAGE],
24
+ }
22
25
  );
23
26
 
24
27
  return stackImageSynchronizer;
@@ -1,11 +1,14 @@
1
1
  import createCameraPositionSynchronizer from './createCameraPositionSynchronizer';
2
2
  import createVOISynchronizer from './createVOISynchronizer';
3
3
  import createZoomPanSynchronizer from './createZoomPanSynchronizer';
4
- import createStackImageSynchronizer from './createStackImageSynchronizer';
4
+ import createImageSliceSynchronizer from './createImageSliceSynchronizer';
5
5
 
6
+ // for backward compatibility
7
+ const createStackImageSynchronizer = createImageSliceSynchronizer;
6
8
  export {
7
9
  createCameraPositionSynchronizer,
8
10
  createVOISynchronizer,
9
11
  createZoomPanSynchronizer,
12
+ createImageSliceSynchronizer,
10
13
  createStackImageSynchronizer,
11
14
  };
@@ -55,10 +55,7 @@ import {
55
55
  import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
56
56
  import { pointInShapeCallback } from '../../utilities';
57
57
  import { StyleSpecifier } from '../../types/AnnotationStyle';
58
- import {
59
- ModalityUnitOptions,
60
- getModalityUnit,
61
- } from '../../utilities/getModalityUnit';
58
+ import { getModalityUnit } from '../../utilities/getModalityUnit';
62
59
  import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
63
60
  import {
64
61
  getCanvasCircleCorners,
@@ -986,7 +983,10 @@ class CircleROITool extends AnnotationTool {
986
983
 
987
984
  const pointsInShape = pointInShapeCallback(
988
985
  imageData,
989
- (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
986
+ (pointLPS) =>
987
+ pointInEllipse(ellipseObj, pointLPS, {
988
+ fast: true,
989
+ }),
990
990
  this.configuration.statsCalculator.statsCallback,
991
991
  boundsIJK
992
992
  );
@@ -1114,7 +1114,7 @@ class EllipticalROITool extends AnnotationTool {
1114
1114
 
1115
1115
  const pointsInShape = pointInShapeCallback(
1116
1116
  imageData,
1117
- (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
1117
+ (pointLPS) => pointInEllipse(ellipseObj, pointLPS, { fast: true }),
1118
1118
  this.configuration.statsCalculator.statsCallback,
1119
1119
  boundsIJK
1120
1120
  );