@cornerstonejs/tools 2.0.0-beta.2 → 2.0.0-beta.3

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 (265) hide show
  1. package/dist/cjs/drawingSvg/getSvgDrawingHelper.js +1 -1
  2. package/dist/cjs/drawingSvg/getSvgDrawingHelper.js.map +1 -1
  3. package/dist/cjs/enums/Events.d.ts +1 -0
  4. package/dist/cjs/enums/Events.js +1 -0
  5. package/dist/cjs/enums/Events.js.map +1 -1
  6. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDown.js +6 -1
  7. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDown.js.map +1 -1
  8. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +2 -0
  9. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +41 -0
  10. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js.map +1 -0
  11. package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +3 -0
  12. package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +39 -0
  13. package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -0
  14. package/dist/cjs/eventListeners/mouse/mouseDownListener.js +5 -1
  15. package/dist/cjs/eventListeners/mouse/mouseDownListener.js.map +1 -1
  16. package/dist/cjs/eventListeners/mouse/mouseMoveListener.js +5 -1
  17. package/dist/cjs/eventListeners/mouse/mouseMoveListener.js.map +1 -1
  18. package/dist/cjs/index.d.ts +2 -2
  19. package/dist/cjs/index.js +5 -2
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +2 -0
  22. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +35 -0
  23. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  24. package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js +1 -1
  25. package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
  26. package/dist/cjs/tools/AdvancedMagnifyTool.d.ts +36 -0
  27. package/dist/cjs/tools/AdvancedMagnifyTool.js +448 -0
  28. package/dist/cjs/tools/AdvancedMagnifyTool.js.map +1 -0
  29. package/dist/cjs/tools/AdvancedMagnifyViewport.d.ts +76 -0
  30. package/dist/cjs/tools/AdvancedMagnifyViewport.js +352 -0
  31. package/dist/cjs/tools/AdvancedMagnifyViewport.js.map +1 -0
  32. package/dist/cjs/tools/AdvancedMagnifyViewportManager.d.ts +36 -0
  33. package/dist/cjs/tools/AdvancedMagnifyViewportManager.js +133 -0
  34. package/dist/cjs/tools/AdvancedMagnifyViewportManager.js.map +1 -0
  35. package/dist/cjs/tools/MagnifyTool.js +2 -2
  36. package/dist/cjs/tools/MagnifyTool.js.map +1 -1
  37. package/dist/cjs/tools/OrientationMarkerTool.d.ts +88 -0
  38. package/dist/cjs/tools/OrientationMarkerTool.js +193 -0
  39. package/dist/cjs/tools/OrientationMarkerTool.js.map +1 -0
  40. package/dist/cjs/tools/OverlayGridTool.d.ts +31 -0
  41. package/dist/cjs/tools/OverlayGridTool.js +170 -0
  42. package/dist/cjs/tools/OverlayGridTool.js.map +1 -0
  43. package/dist/cjs/tools/ReferenceLinesTool.d.ts +3 -0
  44. package/dist/cjs/tools/ReferenceLinesTool.js +71 -2
  45. package/dist/cjs/tools/ReferenceLinesTool.js.map +1 -1
  46. package/dist/cjs/tools/annotation/AngleTool.js +2 -1
  47. package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
  48. package/dist/cjs/tools/annotation/BidirectionalTool.js +1 -1
  49. package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
  50. package/dist/cjs/tools/annotation/CircleROITool.d.ts +1 -2
  51. package/dist/cjs/tools/annotation/CircleROITool.js +8 -8
  52. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  53. package/dist/cjs/tools/annotation/CobbAngleTool.d.ts +31 -5
  54. package/dist/cjs/tools/annotation/CobbAngleTool.js +268 -71
  55. package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
  56. package/dist/cjs/tools/annotation/DragProbeTool.js +4 -3
  57. package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
  58. package/dist/cjs/tools/annotation/EllipticalROITool.d.ts +2 -3
  59. package/dist/cjs/tools/annotation/EllipticalROITool.js +20 -16
  60. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  61. package/dist/cjs/tools/annotation/LengthTool.js +1 -1
  62. package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
  63. package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +1 -2
  64. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +22 -9
  65. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  66. package/dist/cjs/tools/annotation/ProbeTool.d.ts +1 -2
  67. package/dist/cjs/tools/annotation/ProbeTool.js +10 -9
  68. package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
  69. package/dist/cjs/tools/annotation/RectangleROITool.d.ts +1 -1
  70. package/dist/cjs/tools/annotation/RectangleROITool.js +9 -9
  71. package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
  72. package/dist/cjs/tools/base/AnnotationDisplayTool.js +4 -0
  73. package/dist/cjs/tools/base/AnnotationDisplayTool.js.map +1 -1
  74. package/dist/cjs/tools/base/AnnotationTool.d.ts +1 -1
  75. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  76. package/dist/cjs/tools/displayTools/Contour/contourDisplay.js +3 -0
  77. package/dist/cjs/tools/displayTools/Contour/contourDisplay.js.map +1 -1
  78. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +1 -1
  79. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  80. package/dist/cjs/tools/index.d.ts +4 -1
  81. package/dist/cjs/tools/index.js +7 -1
  82. package/dist/cjs/tools/index.js.map +1 -1
  83. package/dist/cjs/types/EventTypes.d.ts +9 -1
  84. package/dist/cjs/types/IToolGroup.d.ts +3 -0
  85. package/dist/cjs/types/ToolAction.d.ts +8 -0
  86. package/dist/cjs/types/ToolAction.js +3 -0
  87. package/dist/cjs/types/ToolAction.js.map +1 -0
  88. package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +55 -0
  89. package/dist/cjs/types/index.d.ts +2 -1
  90. package/dist/cjs/utilities/getModalityUnit.js +5 -2
  91. package/dist/cjs/utilities/getModalityUnit.js.map +1 -1
  92. package/dist/cjs/utilities/index.d.ts +2 -2
  93. package/dist/cjs/utilities/index.js +4 -3
  94. package/dist/cjs/utilities/index.js.map +1 -1
  95. package/dist/cjs/utilities/math/angle/angleBetweenLines.d.ts +3 -1
  96. package/dist/cjs/utilities/math/angle/angleBetweenLines.js +18 -1
  97. package/dist/cjs/utilities/math/angle/angleBetweenLines.js.map +1 -1
  98. package/dist/cjs/utilities/stackPrefetch/index.d.ts +3 -2
  99. package/dist/cjs/utilities/stackPrefetch/index.js +8 -6
  100. package/dist/cjs/utilities/stackPrefetch/index.js.map +1 -1
  101. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.d.ts +16 -0
  102. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js +227 -0
  103. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -0
  104. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.d.ts +7 -1
  105. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js +23 -93
  106. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
  107. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.d.ts +14 -0
  108. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js +85 -0
  109. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -0
  110. package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
  111. package/dist/esm/drawingSvg/getSvgDrawingHelper.js.map +1 -1
  112. package/dist/esm/enums/Events.d.ts +1 -0
  113. package/dist/esm/enums/Events.js +1 -0
  114. package/dist/esm/enums/Events.js.map +1 -1
  115. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js +6 -1
  116. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js.map +1 -1
  117. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +2 -0
  118. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +35 -0
  119. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js.map +1 -0
  120. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +3 -0
  121. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +32 -0
  122. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -0
  123. package/dist/esm/eventListeners/mouse/mouseDownListener.js +5 -1
  124. package/dist/esm/eventListeners/mouse/mouseDownListener.js.map +1 -1
  125. package/dist/esm/eventListeners/mouse/mouseMoveListener.js +5 -1
  126. package/dist/esm/eventListeners/mouse/mouseMoveListener.js.map +1 -1
  127. package/dist/esm/index.d.ts +2 -2
  128. package/dist/esm/index.js +2 -2
  129. package/dist/esm/index.js.map +1 -1
  130. package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +2 -0
  131. package/dist/esm/store/ToolGroupManager/ToolGroup.js +35 -1
  132. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  133. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js +1 -1
  134. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
  135. package/dist/esm/tools/AdvancedMagnifyTool.d.ts +36 -0
  136. package/dist/esm/tools/AdvancedMagnifyTool.js +440 -0
  137. package/dist/esm/tools/AdvancedMagnifyTool.js.map +1 -0
  138. package/dist/esm/tools/AdvancedMagnifyViewport.d.ts +76 -0
  139. package/dist/esm/tools/AdvancedMagnifyViewport.js +346 -0
  140. package/dist/esm/tools/AdvancedMagnifyViewport.js.map +1 -0
  141. package/dist/esm/tools/AdvancedMagnifyViewportManager.d.ts +36 -0
  142. package/dist/esm/tools/AdvancedMagnifyViewportManager.js +128 -0
  143. package/dist/esm/tools/AdvancedMagnifyViewportManager.js.map +1 -0
  144. package/dist/esm/tools/MagnifyTool.js +2 -2
  145. package/dist/esm/tools/MagnifyTool.js.map +1 -1
  146. package/dist/esm/tools/OrientationMarkerTool.d.ts +88 -0
  147. package/dist/esm/tools/OrientationMarkerTool.js +185 -0
  148. package/dist/esm/tools/OrientationMarkerTool.js.map +1 -0
  149. package/dist/esm/tools/OverlayGridTool.d.ts +31 -0
  150. package/dist/esm/tools/OverlayGridTool.js +165 -0
  151. package/dist/esm/tools/OverlayGridTool.js.map +1 -0
  152. package/dist/esm/tools/ReferenceLinesTool.d.ts +3 -0
  153. package/dist/esm/tools/ReferenceLinesTool.js +71 -2
  154. package/dist/esm/tools/ReferenceLinesTool.js.map +1 -1
  155. package/dist/esm/tools/annotation/AngleTool.js +2 -1
  156. package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
  157. package/dist/esm/tools/annotation/BidirectionalTool.js +1 -1
  158. package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
  159. package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -2
  160. package/dist/esm/tools/annotation/CircleROITool.js +8 -8
  161. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  162. package/dist/esm/tools/annotation/CobbAngleTool.d.ts +31 -5
  163. package/dist/esm/tools/annotation/CobbAngleTool.js +275 -72
  164. package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
  165. package/dist/esm/tools/annotation/DragProbeTool.js +4 -3
  166. package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
  167. package/dist/esm/tools/annotation/EllipticalROITool.d.ts +2 -3
  168. package/dist/esm/tools/annotation/EllipticalROITool.js +20 -16
  169. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  170. package/dist/esm/tools/annotation/LengthTool.js +1 -1
  171. package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
  172. package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +1 -2
  173. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +22 -9
  174. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  175. package/dist/esm/tools/annotation/ProbeTool.d.ts +1 -2
  176. package/dist/esm/tools/annotation/ProbeTool.js +10 -9
  177. package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
  178. package/dist/esm/tools/annotation/RectangleROITool.d.ts +1 -1
  179. package/dist/esm/tools/annotation/RectangleROITool.js +9 -9
  180. package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
  181. package/dist/esm/tools/base/AnnotationDisplayTool.js +3 -0
  182. package/dist/esm/tools/base/AnnotationDisplayTool.js.map +1 -1
  183. package/dist/esm/tools/base/AnnotationTool.d.ts +1 -1
  184. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  185. package/dist/esm/tools/displayTools/Contour/contourDisplay.js +4 -1
  186. package/dist/esm/tools/displayTools/Contour/contourDisplay.js.map +1 -1
  187. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +1 -1
  188. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  189. package/dist/esm/tools/index.d.ts +4 -1
  190. package/dist/esm/tools/index.js +4 -1
  191. package/dist/esm/tools/index.js.map +1 -1
  192. package/dist/esm/types/EventTypes.d.ts +9 -1
  193. package/dist/esm/types/IToolGroup.d.ts +3 -0
  194. package/dist/esm/types/ToolAction.d.ts +8 -0
  195. package/dist/esm/types/ToolAction.js +2 -0
  196. package/dist/esm/types/ToolAction.js.map +1 -0
  197. package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +55 -0
  198. package/dist/esm/types/index.d.ts +2 -1
  199. package/dist/esm/utilities/getModalityUnit.js +5 -2
  200. package/dist/esm/utilities/getModalityUnit.js.map +1 -1
  201. package/dist/esm/utilities/index.d.ts +2 -2
  202. package/dist/esm/utilities/index.js +2 -2
  203. package/dist/esm/utilities/index.js.map +1 -1
  204. package/dist/esm/utilities/math/angle/angleBetweenLines.d.ts +3 -1
  205. package/dist/esm/utilities/math/angle/angleBetweenLines.js +19 -2
  206. package/dist/esm/utilities/math/angle/angleBetweenLines.js.map +1 -1
  207. package/dist/esm/utilities/stackPrefetch/index.d.ts +3 -2
  208. package/dist/esm/utilities/stackPrefetch/index.js +3 -2
  209. package/dist/esm/utilities/stackPrefetch/index.js.map +1 -1
  210. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.d.ts +16 -0
  211. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js +220 -0
  212. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -0
  213. package/dist/esm/utilities/stackPrefetch/stackPrefetch.d.ts +7 -1
  214. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +12 -79
  215. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
  216. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.d.ts +14 -0
  217. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js +77 -0
  218. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -0
  219. package/dist/umd/index.js +1 -1
  220. package/dist/umd/index.js.map +1 -1
  221. package/package.json +3 -3
  222. package/src/drawingSvg/getSvgDrawingHelper.ts +4 -1
  223. package/src/enums/Events.ts +9 -0
  224. package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +11 -2
  225. package/src/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.ts +72 -0
  226. package/src/eventDispatchers/shared/getToolsWithActionsForMouseEvent.ts +66 -0
  227. package/src/eventListeners/mouse/mouseDownListener.ts +7 -1
  228. package/src/eventListeners/mouse/mouseMoveListener.ts +7 -1
  229. package/src/index.ts +6 -0
  230. package/src/store/ToolGroupManager/ToolGroup.ts +79 -2
  231. package/src/synchronizers/callbacks/stackImageSyncCallback.ts +1 -1
  232. package/src/tools/AdvancedMagnifyTool.ts +725 -0
  233. package/src/tools/AdvancedMagnifyViewport.ts +624 -0
  234. package/src/tools/AdvancedMagnifyViewportManager.ts +291 -0
  235. package/src/tools/MagnifyTool.ts +2 -2
  236. package/src/tools/OrientationMarkerTool.ts +235 -0
  237. package/src/tools/OverlayGridTool.ts +357 -0
  238. package/src/tools/ReferenceLinesTool.ts +131 -3
  239. package/src/tools/annotation/AngleTool.ts +4 -1
  240. package/src/tools/annotation/BidirectionalTool.ts +1 -1
  241. package/src/tools/annotation/CircleROITool.ts +13 -20
  242. package/src/tools/annotation/CobbAngleTool.ts +422 -99
  243. package/src/tools/annotation/DragProbeTool.ts +6 -13
  244. package/src/tools/annotation/EllipticalROITool.ts +28 -29
  245. package/src/tools/annotation/LengthTool.ts +1 -1
  246. package/src/tools/annotation/PlanarFreehandROITool.ts +35 -20
  247. package/src/tools/annotation/ProbeTool.ts +17 -30
  248. package/src/tools/annotation/RectangleROITool.ts +15 -19
  249. package/src/tools/base/AnnotationDisplayTool.ts +4 -0
  250. package/src/tools/base/AnnotationTool.ts +2 -1
  251. package/src/tools/displayTools/Contour/contourDisplay.ts +8 -0
  252. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +1 -1
  253. package/src/tools/index.ts +6 -0
  254. package/src/types/EventTypes.ts +23 -0
  255. package/src/types/IToolGroup.ts +7 -0
  256. package/src/types/ToolAction.ts +54 -0
  257. package/src/types/ToolSpecificAnnotationTypes.ts +58 -0
  258. package/src/types/index.ts +2 -0
  259. package/src/utilities/getModalityUnit.ts +8 -2
  260. package/src/utilities/index.ts +2 -1
  261. package/src/utilities/math/angle/angleBetweenLines.ts +39 -9
  262. package/src/utilities/stackPrefetch/index.ts +3 -7
  263. package/src/utilities/stackPrefetch/stackContextPrefetch.ts +380 -0
  264. package/src/utilities/stackPrefetch/stackPrefetch.ts +29 -151
  265. package/src/utilities/stackPrefetch/stackPrefetchUtils.ts +114 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/tools",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.0-beta.3",
4
4
  "description": "Cornerstone3D Tools",
5
5
  "main": "dist/umd/index.js",
6
6
  "types": "dist/esm/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": "^2.0.0-beta.2",
32
+ "@cornerstonejs/core": "^2.0.0-beta.3",
33
33
  "lodash.clonedeep": "4.5.0",
34
34
  "lodash.get": "^4.4.2"
35
35
  },
@@ -52,5 +52,5 @@
52
52
  "type": "individual",
53
53
  "url": "https://ohif.org/donate"
54
54
  },
55
- "gitHead": "c154f7531c166db29a54fe41c76a22ecc7ac47c8"
55
+ "gitHead": "d78cf780d4383a61ea0a9762bafa4104666757a4"
56
56
  }
@@ -38,7 +38,10 @@ function getSvgDrawingHelper(element: HTMLDivElement): SVGDrawingHelper {
38
38
  function _getSvgLayer(element) {
39
39
  const viewportElement = `.${VIEWPORT_ELEMENT}`;
40
40
  const internalDivElement = element.querySelector(viewportElement);
41
- const svgLayer = internalDivElement.querySelector('.svg-layer');
41
+
42
+ // Using :scope to make sure the right svg layer is selected otherwise it
43
+ // may select one from a nested viewport (eg: AdvancedMagnifyTool).
44
+ const svgLayer = internalDivElement.querySelector(':scope > .svg-layer');
42
45
 
43
46
  return svgLayer;
44
47
  }
@@ -18,6 +18,15 @@ enum Events {
18
18
  */
19
19
  TOOL_ACTIVATED = 'CORNERSTONE_TOOLS_TOOL_ACTIVATED',
20
20
 
21
+ /**
22
+ * Triggers on the eventTarget when a mode of a tool is changed (active, passive, enabled and disabled).
23
+ *
24
+ * Make use of {@link EventTypes.ToolModeChangedEventType | Tool Mode Changed Event Type }
25
+ * for typing your event listeners for this tool activated event, and see what event
26
+ * detail is included in {@link EventTypes.ToolModeChangedEventDetail | Tool Mode Changed Event Detail}.
27
+ */
28
+ TOOL_MODE_CHANGED = 'CORNERSTONE_TOOLS_TOOL_MODE_CHANGED',
29
+
21
30
  ///////////////////////////////////////
22
31
  // Annotations
23
32
  ///////////////////////////////////////
@@ -20,6 +20,7 @@ import filterToolsWithAnnotationsForElement from '../../store/filterToolsWithAnn
20
20
  import filterMoveableAnnotationTools from '../../store/filterMoveableAnnotationTools';
21
21
  import getActiveToolForMouseEvent from '../shared/getActiveToolForMouseEvent';
22
22
  import getToolsWithModesForMouseEvent from '../shared/getToolsWithModesForMouseEvent';
23
+ import mouseDownAnnotationAction from './mouseDownAnnotationAction';
23
24
 
24
25
  const { Active, Passive } = ToolModes;
25
26
 
@@ -39,8 +40,10 @@ const { Active, Passive } = ToolModes;
39
40
  * - Next we check any tools are interactable (e.g. moving an entire length annotation rather than one of its handles:
40
41
  * `filterMoveableAnnotationTools`). If interactable tools are found, the first tool found consumes the event and the
41
42
  * event does not propagate further.
42
- * - Finally, if the `activeTool` has `postMouseDownCallback`, this is called. If the callback returns `true`,
43
+ * - If the `activeTool` has `postMouseDownCallback`, this is called. If the callback returns `true`,
43
44
  * the event does not propagate further.
45
+ * - Finally, look for annotations actions that could handle the event such as showing a dropdown to allow the user
46
+ * change the magnifying glass zoom factor.
44
47
  *
45
48
  * If the event is not consumed the event will bubble to the `mouseDownActivate` handler.
46
49
  *
@@ -133,7 +136,7 @@ export default function mouseDown(evt: EventTypes.MouseDownEventType) {
133
136
  );
134
137
 
135
138
  toggleAnnotationSelection(annotation.annotationUID, isMultiSelect);
136
- tool.toolSelectedCallback(evt, annotation, 'Mouse');
139
+ tool.toolSelectedCallback(evt, annotation, 'Mouse', canvasCoords);
137
140
 
138
141
  return;
139
142
  }
@@ -148,6 +151,12 @@ export default function mouseDown(evt: EventTypes.MouseDownEventType) {
148
151
  }
149
152
  }
150
153
 
154
+ const actionExecuted = mouseDownAnnotationAction(evt);
155
+
156
+ if (actionExecuted) {
157
+ return;
158
+ }
159
+
151
160
  // Don't stop propagation so that mouseDownActivate can handle the event
152
161
  }
153
162
 
@@ -0,0 +1,72 @@
1
+ import { getEnabledElement } from '@cornerstonejs/core';
2
+ import { state } from '../../store';
3
+ import { ToolModes } from '../../enums';
4
+ import { EventTypes } from '../../types';
5
+
6
+ // Util
7
+ import filterToolsWithAnnotationsForElement from '../../store/filterToolsWithAnnotationsForElement';
8
+ import filterMoveableAnnotationTools from '../../store/filterMoveableAnnotationTools';
9
+ import getToolsWithActionsForMouseEvent from '../shared/getToolsWithActionsForMouseEvent';
10
+
11
+ const { Active, Passive } = ToolModes;
12
+
13
+ /**
14
+ * Look for active or passive annotations with an action that could handle the
15
+ * event based on the bindings and invoke the first one found.
16
+ *
17
+ * @param evt - The normalized mouseDown event.
18
+ * @returns True if an action has executed or false otherwise
19
+ */
20
+ export default function mouseDownAnnotationAction(
21
+ evt: EventTypes.MouseDownEventType
22
+ ): boolean {
23
+ // If a tool has locked the current state it is dealing with an interaction within its own eventLoop.
24
+ if (state.isInteractingWithTool) {
25
+ return false;
26
+ }
27
+
28
+ const eventDetail = evt.detail;
29
+ const { element } = eventDetail;
30
+ const enabledElement = getEnabledElement(element);
31
+ const { canvas: canvasCoords } = eventDetail.currentPoints;
32
+
33
+ if (!enabledElement) {
34
+ return false;
35
+ }
36
+
37
+ // Find all tools that might respond to this mouse down
38
+ const toolsWithActions = getToolsWithActionsForMouseEvent(evt, [
39
+ Active,
40
+ Passive,
41
+ ]);
42
+
43
+ const tools = Array.from(toolsWithActions.keys());
44
+
45
+ // Filter tools with annotations for this element
46
+ const annotationToolsWithAnnotations = filterToolsWithAnnotationsForElement(
47
+ element,
48
+ tools
49
+ );
50
+
51
+ // Only moveable annotations (unlocked, visible and close to the canvas coordinates) may trigger actions
52
+ const moveableAnnotationTools = filterMoveableAnnotationTools(
53
+ element,
54
+ annotationToolsWithAnnotations,
55
+ canvasCoords
56
+ );
57
+
58
+ // If there are annotation tools that are interactable, select the first one
59
+ // that isn't locked. If there's only one annotation tool, select it.
60
+ if (moveableAnnotationTools.length > 0) {
61
+ const { tool, annotation } = moveableAnnotationTools[0];
62
+ const action = toolsWithActions.get(tool);
63
+ const method =
64
+ typeof action.method === 'string' ? tool[action.method] : action.method;
65
+
66
+ method.call(tool, evt, annotation);
67
+
68
+ return true;
69
+ }
70
+
71
+ return false;
72
+ }
@@ -0,0 +1,66 @@
1
+ import { ToolGroupManager } from '../../store';
2
+ import { ToolModes } from '../../enums';
3
+ import { ToolAction, EventTypes } from '../../types';
4
+
5
+ import { keyEventListener } from '../../eventListeners';
6
+ import getMouseModifier from './getMouseModifier';
7
+
8
+ type ModesFilter = Array<ToolModes>;
9
+
10
+ /**
11
+ * Given the mouse event and a list of tool modes, find all tool instances
12
+ * with actions that were added to the tool group associated with the viewport
13
+ * that triggered the event.
14
+ *
15
+ * @param evt - mouseDown event triggered by a cornerstone viewport
16
+ * @param toolModes - List of tool modes used to filter the tools registered
17
+ * in the viewport's tool group
18
+ */
19
+ export default function getToolsWithActionsForMouseEvent(
20
+ evt: EventTypes.MouseMoveEventType,
21
+ toolModes: ToolModes[]
22
+ ): Map<any, ToolAction> {
23
+ const toolsWithActions = new Map();
24
+ const { renderingEngineId, viewportId } = evt.detail;
25
+ const toolGroup = ToolGroupManager.getToolGroupForViewport(
26
+ viewportId,
27
+ renderingEngineId
28
+ );
29
+
30
+ if (!toolGroup) {
31
+ return toolsWithActions;
32
+ }
33
+
34
+ const toolGroupToolNames = Object.keys(toolGroup.toolOptions);
35
+ const defaultMousePrimary = toolGroup.getDefaultMousePrimary();
36
+ const mouseEvent = evt.detail.event;
37
+ const mouseButton = mouseEvent?.buttons ?? defaultMousePrimary;
38
+ const modifierKey =
39
+ getMouseModifier(mouseEvent) || keyEventListener.getModifierKey();
40
+
41
+ for (let j = 0; j < toolGroupToolNames.length; j++) {
42
+ const toolName = toolGroupToolNames[j];
43
+ const tool = toolGroup.getToolInstance(toolName);
44
+ const actions = tool.configuration?.actions;
45
+
46
+ if (!actions?.length || !toolModes.includes(tool.mode)) {
47
+ continue;
48
+ }
49
+
50
+ const action = actions.find(
51
+ (action) =>
52
+ action.bindings.length &&
53
+ action.bindings.some(
54
+ (binding) =>
55
+ binding.mouseButton === mouseButton &&
56
+ binding.modifierKey === modifierKey
57
+ )
58
+ );
59
+
60
+ if (action) {
61
+ toolsWithActions.set(tool, action);
62
+ }
63
+ }
64
+
65
+ return toolsWithActions;
66
+ }
@@ -262,7 +262,13 @@ function _onMouseDrag(evt: MouseEvent) {
262
262
  deltaPoints,
263
263
  };
264
264
 
265
- triggerEvent(state.element, MOUSE_DRAG, eventDetail);
265
+ const consumed = !triggerEvent(state.element, MOUSE_DRAG, eventDetail);
266
+
267
+ // Events.MOUSE_DRAG was consumed, thus no other listener should handle this event.
268
+ if (consumed) {
269
+ evt.stopImmediatePropagation();
270
+ evt.preventDefault();
271
+ }
266
272
 
267
273
  // Update the last points
268
274
  state.lastPoints = _copyPoints(currentPoints);
@@ -27,7 +27,13 @@ function mouseMoveListener(evt: MouseEvent) {
27
27
  event: evt,
28
28
  };
29
29
 
30
- triggerEvent(element, eventName, eventDetail);
30
+ const consumed = !triggerEvent(element, eventName, eventDetail);
31
+
32
+ // Events.MOUSE_MOVE was consumed, thus no other listener should handle this event.
33
+ if (consumed) {
34
+ evt.stopImmediatePropagation();
35
+ evt.preventDefault();
36
+ }
31
37
  }
32
38
 
33
39
  export default mouseMoveListener;
package/src/index.ts CHANGED
@@ -54,10 +54,13 @@ import {
54
54
  AngleTool,
55
55
  CobbAngleTool,
56
56
  MagnifyTool,
57
+ AdvancedMagnifyTool,
57
58
  ReferenceCursors,
58
59
  ReferenceLines,
59
60
  PaintFillTool,
60
61
  ScaleOverlayTool,
62
+ OrientationMarkerTool,
63
+ OverlayGridTool,
61
64
  } from './tools';
62
65
 
63
66
  import * as Enums from './enums';
@@ -88,6 +91,7 @@ export {
88
91
  LengthTool,
89
92
  CrosshairsTool,
90
93
  ReferenceLinesTool,
94
+ OverlayGridTool,
91
95
  ProbeTool,
92
96
  RectangleROITool,
93
97
  EllipticalROITool,
@@ -98,6 +102,7 @@ export {
98
102
  AngleTool,
99
103
  CobbAngleTool,
100
104
  MagnifyTool,
105
+ AdvancedMagnifyTool,
101
106
  ReferenceCursors,
102
107
  ReferenceLines,
103
108
  ScaleOverlayTool,
@@ -110,6 +115,7 @@ export {
110
115
  RectangleROIThresholdTool,
111
116
  RectangleROIStartEndThresholdTool,
112
117
  BrushTool,
118
+ OrientationMarkerTool,
113
119
  // Synchronizers
114
120
  synchronizers,
115
121
  Synchronizer,
@@ -12,8 +12,11 @@ import {
12
12
  } from '@cornerstonejs/core';
13
13
  import type { Types } from '@cornerstonejs/core';
14
14
  import { Events } from '../../enums';
15
- import { ToolActivatedEventDetail } from '../../types/EventTypes';
16
- import { state } from '../index';
15
+ import {
16
+ ToolActivatedEventDetail,
17
+ ToolModeChangedEventDetail,
18
+ } from '../../types/EventTypes';
19
+ import { ToolGroupManager, state } from '../index';
17
20
  import {
18
21
  IToolBinding,
19
22
  IToolClassReference,
@@ -385,6 +388,7 @@ export default class ToolGroup implements IToolGroup {
385
388
  };
386
389
 
387
390
  triggerEvent(eventTarget, Events.TOOL_ACTIVATED, eventDetail);
391
+ this._triggerToolModeChangedEvent(toolName, Active, toolBindingsOptions);
388
392
  }
389
393
 
390
394
  /**
@@ -440,6 +444,13 @@ export default class ToolGroup implements IToolGroup {
440
444
  toolInstance.onSetToolPassive();
441
445
  }
442
446
  this._renderViewports();
447
+
448
+ // It would make sense to use `toolInstance.mode` as mode when setting a tool
449
+ // as passive because it can still be actived in the end but `Passive` must
450
+ // be used when synchronizing ToolGroups so that other ToolGroups can take the
451
+ // same action (update tool bindings). Should the event have two different modes
452
+ // to handle this special case?
453
+ this._triggerToolModeChangedEvent(toolName, Passive);
443
454
  }
444
455
 
445
456
  /**
@@ -473,6 +484,7 @@ export default class ToolGroup implements IToolGroup {
473
484
  }
474
485
 
475
486
  this._renderViewports();
487
+ this._triggerToolModeChangedEvent(toolName, Enabled);
476
488
  }
477
489
 
478
490
  /**
@@ -505,6 +517,7 @@ export default class ToolGroup implements IToolGroup {
505
517
  toolInstance.onSetToolDisabled();
506
518
  }
507
519
  this._renderViewports();
520
+ this._triggerToolModeChangedEvent(toolName, Disabled);
508
521
  }
509
522
 
510
523
  /**
@@ -669,6 +682,49 @@ export default class ToolGroup implements IToolGroup {
669
682
  return cloneDeep(_configuration);
670
683
  }
671
684
 
685
+ /**
686
+ *
687
+ * @param newToolGroupId - Id of the new (clone) tool group
688
+ * @param fnToolFilter - Function to filter which tools from this tool group
689
+ * should be added to the new (clone) one. Example: only annotations tools
690
+ * can be filtered and added to the new tool group.
691
+ * @returns A new tool group that is a clone of this one
692
+ */
693
+ public clone(
694
+ newToolGroupId,
695
+ fnToolFilter: (toolName: string) => void = null
696
+ ): IToolGroup {
697
+ let toolGroup = ToolGroupManager.getToolGroup(newToolGroupId);
698
+
699
+ if (toolGroup) {
700
+ console.warn(`ToolGroup ${newToolGroupId} already exists`);
701
+ return toolGroup;
702
+ }
703
+
704
+ toolGroup = ToolGroupManager.createToolGroup(newToolGroupId);
705
+ fnToolFilter = fnToolFilter ?? (() => true);
706
+
707
+ Object.keys(this._toolInstances)
708
+ .filter(fnToolFilter)
709
+ .forEach((toolName) => {
710
+ const sourceToolInstance = this._toolInstances[toolName];
711
+ const sourceToolOptions = this.toolOptions[toolName];
712
+ const sourceToolMode = sourceToolInstance.mode;
713
+
714
+ toolGroup.addTool(toolName);
715
+
716
+ (toolGroup as unknown as ToolGroup).setToolMode(
717
+ toolName,
718
+ sourceToolMode,
719
+ {
720
+ bindings: sourceToolOptions.bindings ?? [],
721
+ }
722
+ );
723
+ });
724
+
725
+ return toolGroup;
726
+ }
727
+
672
728
  /**
673
729
  * Check if the tool binding is set to be primary mouse button.
674
730
  * @param toolOptions - The options for the tool mode.
@@ -692,6 +748,27 @@ export default class ToolGroup implements IToolGroup {
692
748
  getRenderingEngine(renderingEngineId).renderViewport(viewportId);
693
749
  });
694
750
  }
751
+
752
+ /**
753
+ * Trigger ToolModeChangedEvent when changing the tool mode
754
+ * @param toolName - Tool name
755
+ * @param mode - Tool mode
756
+ * @param toolBindingsOptions - Binding options used when a tool is activated
757
+ */
758
+ private _triggerToolModeChangedEvent(
759
+ toolName: string,
760
+ mode: ToolModes,
761
+ toolBindingsOptions?: SetToolBindingsType
762
+ ): void {
763
+ const eventDetail: ToolModeChangedEventDetail = {
764
+ toolGroupId: this.id,
765
+ toolName,
766
+ mode,
767
+ toolBindingsOptions,
768
+ };
769
+
770
+ triggerEvent(eventTarget, Events.TOOL_MODE_CHANGED, eventDetail);
771
+ }
695
772
  }
696
773
 
697
774
  function hasSameBinding(
@@ -85,7 +85,7 @@ export default async function stackImageSyncCallback(
85
85
  const frameOfReferenceUID2 = tViewport.getFrameOfReferenceUID();
86
86
  if (
87
87
  frameOfReferenceUID1 === frameOfReferenceUID2 &&
88
- options.useInitialPosition !== false
88
+ options?.useInitialPosition !== false
89
89
  ) {
90
90
  registrationMatrixMat4 = mat4.identity(mat4.create());
91
91
  } else {