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

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 (425) hide show
  1. package/dist/cjs/drawingSvg/drawCircle.js +9 -5
  2. package/dist/cjs/drawingSvg/drawCircle.js.map +1 -1
  3. package/dist/cjs/drawingSvg/drawEllipse.js +4 -4
  4. package/dist/cjs/drawingSvg/drawEllipse.js.map +1 -1
  5. package/dist/cjs/drawingSvg/drawHandles.js +4 -4
  6. package/dist/cjs/drawingSvg/drawHandles.js.map +1 -1
  7. package/dist/cjs/drawingSvg/drawLine.js +4 -4
  8. package/dist/cjs/drawingSvg/drawLine.js.map +1 -1
  9. package/dist/cjs/drawingSvg/drawPolyline.js +4 -4
  10. package/dist/cjs/drawingSvg/drawPolyline.js.map +1 -1
  11. package/dist/cjs/drawingSvg/drawRect.js +4 -4
  12. package/dist/cjs/drawingSvg/drawRect.js.map +1 -1
  13. package/dist/cjs/drawingSvg/drawTextBox.js +4 -4
  14. package/dist/cjs/drawingSvg/drawTextBox.js.map +1 -1
  15. package/dist/cjs/drawingSvg/index.d.ts +3 -1
  16. package/dist/cjs/drawingSvg/index.js +5 -1
  17. package/dist/cjs/drawingSvg/index.js.map +1 -1
  18. package/dist/cjs/drawingSvg/setAttributesIfNecessary.d.ts +2 -0
  19. package/dist/cjs/drawingSvg/{_setAttributesIfNecessary.js → setAttributesIfNecessary.js} +5 -5
  20. package/dist/cjs/drawingSvg/setAttributesIfNecessary.js.map +1 -0
  21. package/dist/cjs/drawingSvg/setNewAttributesIfValid.d.ts +2 -0
  22. package/dist/cjs/drawingSvg/{_setNewAttributesIfValid.js → setNewAttributesIfValid.js} +5 -5
  23. package/dist/cjs/drawingSvg/setNewAttributesIfValid.js.map +1 -0
  24. package/dist/cjs/enums/Events.d.ts +1 -0
  25. package/dist/cjs/enums/Events.js +1 -0
  26. package/dist/cjs/enums/Events.js.map +1 -1
  27. package/dist/cjs/eventDispatchers/shared/getMouseModifier.js +10 -5
  28. package/dist/cjs/eventDispatchers/shared/getMouseModifier.js.map +1 -1
  29. package/dist/cjs/eventListeners/keyboard/keyDownListener.js +8 -0
  30. package/dist/cjs/eventListeners/keyboard/keyDownListener.js.map +1 -1
  31. package/dist/cjs/eventListeners/mouse/mouseDownListener.js +2 -1
  32. package/dist/cjs/eventListeners/mouse/mouseDownListener.js.map +1 -1
  33. package/dist/cjs/eventListeners/touch/touchStartListener.js +10 -5
  34. package/dist/cjs/eventListeners/touch/touchStartListener.js.map +1 -1
  35. package/dist/cjs/index.d.ts +2 -2
  36. package/dist/cjs/index.js +3 -2
  37. package/dist/cjs/index.js.map +1 -1
  38. package/dist/cjs/stateManagement/annotation/config/ToolStyle.js +1 -0
  39. package/dist/cjs/stateManagement/annotation/config/ToolStyle.js.map +1 -1
  40. package/dist/cjs/stateManagement/annotation/config/getState.js +6 -3
  41. package/dist/cjs/stateManagement/annotation/config/getState.js.map +1 -1
  42. package/dist/cjs/stateManagement/annotation/config/helpers.js +4 -2
  43. package/dist/cjs/stateManagement/annotation/config/helpers.js.map +1 -1
  44. package/dist/cjs/store/SynchronizerManager/Synchronizer.js +10 -2
  45. package/dist/cjs/store/SynchronizerManager/Synchronizer.js.map +1 -1
  46. package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +3 -3
  47. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +9 -2
  48. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  49. package/dist/cjs/store/ToolGroupManager/getToolGroupsWithToolName.js +2 -1
  50. package/dist/cjs/store/ToolGroupManager/getToolGroupsWithToolName.js.map +1 -1
  51. package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js +25 -22
  52. package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
  53. package/dist/cjs/synchronizers/callbacks/voiSyncCallback.js +1 -1
  54. package/dist/cjs/synchronizers/callbacks/voiSyncCallback.js.map +1 -1
  55. package/dist/cjs/tools/MIPJumpToClickTool.js +4 -2
  56. package/dist/cjs/tools/MIPJumpToClickTool.js.map +1 -1
  57. package/dist/cjs/tools/PlanarRotateTool.js +2 -1
  58. package/dist/cjs/tools/PlanarRotateTool.js.map +1 -1
  59. package/dist/cjs/tools/ReferenceCursors.js +58 -29
  60. package/dist/cjs/tools/ReferenceCursors.js.map +1 -1
  61. package/dist/cjs/tools/ScaleOverlayTool.js +2 -1
  62. package/dist/cjs/tools/ScaleOverlayTool.js.map +1 -1
  63. package/dist/cjs/tools/annotation/AngleTool.d.ts +0 -1
  64. package/dist/cjs/tools/annotation/AngleTool.js +31 -14
  65. package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
  66. package/dist/cjs/tools/annotation/ArrowAnnotateTool.js +15 -1
  67. package/dist/cjs/tools/annotation/ArrowAnnotateTool.js.map +1 -1
  68. package/dist/cjs/tools/annotation/BidirectionalTool.d.ts +0 -1
  69. package/dist/cjs/tools/annotation/BidirectionalTool.js +29 -14
  70. package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
  71. package/dist/cjs/tools/annotation/CircleROITool.d.ts +0 -1
  72. package/dist/cjs/tools/annotation/CircleROITool.js +56 -53
  73. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  74. package/dist/cjs/tools/annotation/CobbAngleTool.d.ts +0 -1
  75. package/dist/cjs/tools/annotation/CobbAngleTool.js +26 -11
  76. package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
  77. package/dist/cjs/tools/annotation/DragProbeTool.js +13 -1
  78. package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
  79. package/dist/cjs/tools/annotation/EllipticalROITool.d.ts +0 -1
  80. package/dist/cjs/tools/annotation/EllipticalROITool.js +48 -46
  81. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  82. package/dist/cjs/tools/annotation/LengthTool.d.ts +0 -1
  83. package/dist/cjs/tools/annotation/LengthTool.js +26 -11
  84. package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
  85. package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +0 -1
  86. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +50 -51
  87. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  88. package/dist/cjs/tools/annotation/ProbeTool.d.ts +0 -1
  89. package/dist/cjs/tools/annotation/ProbeTool.js +18 -13
  90. package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
  91. package/dist/cjs/tools/annotation/RectangleROITool.d.ts +0 -1
  92. package/dist/cjs/tools/annotation/RectangleROITool.js +46 -48
  93. package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
  94. package/dist/cjs/tools/base/AnnotationTool.d.ts +2 -1
  95. package/dist/cjs/tools/base/AnnotationTool.js +27 -16
  96. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  97. package/dist/cjs/tools/base/index.d.ts +2 -1
  98. package/dist/cjs/tools/base/index.js +3 -1
  99. package/dist/cjs/tools/base/index.js.map +1 -1
  100. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  101. package/dist/cjs/tools/displayTools/Labelmap/removeLabelmapFromElement.js +3 -0
  102. package/dist/cjs/tools/displayTools/Labelmap/removeLabelmapFromElement.js.map +1 -1
  103. package/dist/cjs/tools/displayTools/SegmentationDisplayTool.js +5 -6
  104. package/dist/cjs/tools/displayTools/SegmentationDisplayTool.js.map +1 -1
  105. package/dist/cjs/tools/index.d.ts +2 -2
  106. package/dist/cjs/tools/index.js +2 -1
  107. package/dist/cjs/tools/index.js.map +1 -1
  108. package/dist/cjs/tools/segmentation/BrushTool.js +24 -17
  109. package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
  110. package/dist/cjs/tools/segmentation/PaintFillTool.js +4 -2
  111. package/dist/cjs/tools/segmentation/PaintFillTool.js.map +1 -1
  112. package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -0
  113. package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  114. package/dist/cjs/tools/segmentation/strategies/fillCircle.js +5 -7
  115. package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
  116. package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +3 -0
  117. package/dist/cjs/tools/segmentation/strategies/fillSphere.js +38 -10
  118. package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
  119. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +3 -0
  120. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js +10 -0
  121. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -0
  122. package/dist/cjs/types/CINETypes.d.ts +2 -0
  123. package/dist/cjs/types/CalculatorTypes.d.ts +6 -0
  124. package/dist/cjs/types/CalculatorTypes.js +3 -0
  125. package/dist/cjs/types/CalculatorTypes.js.map +1 -0
  126. package/dist/cjs/types/EventTypes.d.ts +8 -1
  127. package/dist/cjs/types/ISetToolModeOptions.d.ts +2 -2
  128. package/dist/cjs/types/IToolGroup.d.ts +3 -2
  129. package/dist/cjs/types/ToolProps.d.ts +5 -1
  130. package/dist/cjs/types/index.d.ts +3 -2
  131. package/dist/cjs/utilities/cine/playClip.js +13 -3
  132. package/dist/cjs/utilities/cine/playClip.js.map +1 -1
  133. package/dist/cjs/utilities/dynamicVolume/getDataInTime.js +7 -4
  134. package/dist/cjs/utilities/dynamicVolume/getDataInTime.js.map +1 -1
  135. package/dist/cjs/utilities/getCalibratedUnits.js +10 -5
  136. package/dist/cjs/utilities/getCalibratedUnits.js.map +1 -1
  137. package/dist/cjs/utilities/math/basic/BasicStatsCalculator.d.ts +14 -0
  138. package/dist/cjs/utilities/math/basic/BasicStatsCalculator.js +44 -0
  139. package/dist/cjs/utilities/math/basic/BasicStatsCalculator.js.map +1 -0
  140. package/dist/cjs/utilities/math/basic/Calculator.d.ts +8 -0
  141. package/dist/cjs/utilities/math/basic/Calculator.js +6 -0
  142. package/dist/cjs/utilities/math/basic/Calculator.js.map +1 -0
  143. package/dist/cjs/utilities/math/basic/index.d.ts +3 -0
  144. package/dist/cjs/utilities/math/basic/index.js +11 -0
  145. package/dist/cjs/utilities/math/basic/index.js.map +1 -0
  146. package/dist/cjs/utilities/math/index.d.ts +2 -1
  147. package/dist/cjs/utilities/math/index.js +3 -1
  148. package/dist/cjs/utilities/math/index.js.map +1 -1
  149. package/dist/cjs/utilities/math/midPoint.js +2 -1
  150. package/dist/cjs/utilities/math/midPoint.js.map +1 -1
  151. package/dist/cjs/utilities/math/polyline/pointInPolyline.js +2 -1
  152. package/dist/cjs/utilities/math/polyline/pointInPolyline.js.map +1 -1
  153. package/dist/cjs/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
  154. package/dist/cjs/utilities/math/vec2/liangBarksyClip.js +10 -5
  155. package/dist/cjs/utilities/math/vec2/liangBarksyClip.js.map +1 -1
  156. package/dist/cjs/utilities/pointInShapeCallback.d.ts +7 -1
  157. package/dist/cjs/utilities/pointInShapeCallback.js +6 -1
  158. package/dist/cjs/utilities/pointInShapeCallback.js.map +1 -1
  159. package/dist/cjs/utilities/roundNumber.js +4 -2
  160. package/dist/cjs/utilities/roundNumber.js.map +1 -1
  161. package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.d.ts +2 -2
  162. package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.js +4 -4
  163. package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.js.map +1 -1
  164. package/dist/cjs/utilities/segmentation/thresholdVolumeByRange.js +2 -1
  165. package/dist/cjs/utilities/segmentation/thresholdVolumeByRange.js.map +1 -1
  166. package/dist/cjs/utilities/segmentation/utilities.d.ts +1 -2
  167. package/dist/cjs/utilities/segmentation/utilities.js +4 -1
  168. package/dist/cjs/utilities/segmentation/utilities.js.map +1 -1
  169. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js +4 -4
  170. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
  171. package/dist/esm/drawingSvg/drawCircle.js +9 -5
  172. package/dist/esm/drawingSvg/drawCircle.js.map +1 -1
  173. package/dist/esm/drawingSvg/drawEllipse.js +4 -4
  174. package/dist/esm/drawingSvg/drawEllipse.js.map +1 -1
  175. package/dist/esm/drawingSvg/drawHandles.js +4 -4
  176. package/dist/esm/drawingSvg/drawHandles.js.map +1 -1
  177. package/dist/esm/drawingSvg/drawLine.js +4 -4
  178. package/dist/esm/drawingSvg/drawLine.js.map +1 -1
  179. package/dist/esm/drawingSvg/drawPolyline.js +4 -4
  180. package/dist/esm/drawingSvg/drawPolyline.js.map +1 -1
  181. package/dist/esm/drawingSvg/drawRect.js +4 -4
  182. package/dist/esm/drawingSvg/drawRect.js.map +1 -1
  183. package/dist/esm/drawingSvg/drawTextBox.js +4 -4
  184. package/dist/esm/drawingSvg/drawTextBox.js.map +1 -1
  185. package/dist/esm/drawingSvg/index.d.ts +3 -1
  186. package/dist/esm/drawingSvg/index.js +3 -1
  187. package/dist/esm/drawingSvg/index.js.map +1 -1
  188. package/dist/esm/drawingSvg/setAttributesIfNecessary.d.ts +2 -0
  189. package/dist/esm/drawingSvg/{_setAttributesIfNecessary.js → setAttributesIfNecessary.js} +3 -3
  190. package/dist/esm/drawingSvg/setAttributesIfNecessary.js.map +1 -0
  191. package/dist/esm/drawingSvg/setNewAttributesIfValid.d.ts +2 -0
  192. package/dist/esm/drawingSvg/{_setNewAttributesIfValid.js → setNewAttributesIfValid.js} +3 -3
  193. package/dist/esm/drawingSvg/setNewAttributesIfValid.js.map +1 -0
  194. package/dist/esm/enums/Events.d.ts +1 -0
  195. package/dist/esm/enums/Events.js +1 -0
  196. package/dist/esm/enums/Events.js.map +1 -1
  197. package/dist/esm/eventDispatchers/shared/getMouseModifier.js +10 -5
  198. package/dist/esm/eventDispatchers/shared/getMouseModifier.js.map +1 -1
  199. package/dist/esm/eventListeners/keyboard/keyDownListener.js +8 -0
  200. package/dist/esm/eventListeners/keyboard/keyDownListener.js.map +1 -1
  201. package/dist/esm/eventListeners/mouse/mouseDownListener.js +2 -1
  202. package/dist/esm/eventListeners/mouse/mouseDownListener.js.map +1 -1
  203. package/dist/esm/eventListeners/touch/touchStartListener.js +10 -5
  204. package/dist/esm/eventListeners/touch/touchStartListener.js.map +1 -1
  205. package/dist/esm/index.d.ts +2 -2
  206. package/dist/esm/index.js +2 -2
  207. package/dist/esm/index.js.map +1 -1
  208. package/dist/esm/stateManagement/annotation/config/ToolStyle.js +1 -0
  209. package/dist/esm/stateManagement/annotation/config/ToolStyle.js.map +1 -1
  210. package/dist/esm/stateManagement/annotation/config/getState.js +6 -3
  211. package/dist/esm/stateManagement/annotation/config/getState.js.map +1 -1
  212. package/dist/esm/stateManagement/annotation/config/helpers.js +4 -2
  213. package/dist/esm/stateManagement/annotation/config/helpers.js.map +1 -1
  214. package/dist/esm/store/SynchronizerManager/Synchronizer.js +10 -2
  215. package/dist/esm/store/SynchronizerManager/Synchronizer.js.map +1 -1
  216. package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +3 -3
  217. package/dist/esm/store/ToolGroupManager/ToolGroup.js +10 -3
  218. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  219. package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js +2 -1
  220. package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js.map +1 -1
  221. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js +26 -23
  222. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
  223. package/dist/esm/synchronizers/callbacks/voiSyncCallback.js +1 -1
  224. package/dist/esm/synchronizers/callbacks/voiSyncCallback.js.map +1 -1
  225. package/dist/esm/tools/MIPJumpToClickTool.js +4 -2
  226. package/dist/esm/tools/MIPJumpToClickTool.js.map +1 -1
  227. package/dist/esm/tools/PlanarRotateTool.js +2 -1
  228. package/dist/esm/tools/PlanarRotateTool.js.map +1 -1
  229. package/dist/esm/tools/ReferenceCursors.js +58 -29
  230. package/dist/esm/tools/ReferenceCursors.js.map +1 -1
  231. package/dist/esm/tools/ScaleOverlayTool.js +2 -1
  232. package/dist/esm/tools/ScaleOverlayTool.js.map +1 -1
  233. package/dist/esm/tools/annotation/AngleTool.d.ts +0 -1
  234. package/dist/esm/tools/annotation/AngleTool.js +31 -14
  235. package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
  236. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +15 -1
  237. package/dist/esm/tools/annotation/ArrowAnnotateTool.js.map +1 -1
  238. package/dist/esm/tools/annotation/BidirectionalTool.d.ts +0 -1
  239. package/dist/esm/tools/annotation/BidirectionalTool.js +29 -14
  240. package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
  241. package/dist/esm/tools/annotation/CircleROITool.d.ts +0 -1
  242. package/dist/esm/tools/annotation/CircleROITool.js +55 -53
  243. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  244. package/dist/esm/tools/annotation/CobbAngleTool.d.ts +0 -1
  245. package/dist/esm/tools/annotation/CobbAngleTool.js +26 -11
  246. package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
  247. package/dist/esm/tools/annotation/DragProbeTool.js +13 -1
  248. package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
  249. package/dist/esm/tools/annotation/EllipticalROITool.d.ts +0 -1
  250. package/dist/esm/tools/annotation/EllipticalROITool.js +47 -46
  251. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  252. package/dist/esm/tools/annotation/LengthTool.d.ts +0 -1
  253. package/dist/esm/tools/annotation/LengthTool.js +26 -11
  254. package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
  255. package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +0 -1
  256. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +49 -51
  257. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  258. package/dist/esm/tools/annotation/ProbeTool.d.ts +0 -1
  259. package/dist/esm/tools/annotation/ProbeTool.js +18 -13
  260. package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
  261. package/dist/esm/tools/annotation/RectangleROITool.d.ts +0 -1
  262. package/dist/esm/tools/annotation/RectangleROITool.js +45 -48
  263. package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
  264. package/dist/esm/tools/base/AnnotationTool.d.ts +2 -1
  265. package/dist/esm/tools/base/AnnotationTool.js +26 -16
  266. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  267. package/dist/esm/tools/base/index.d.ts +2 -1
  268. package/dist/esm/tools/base/index.js +2 -1
  269. package/dist/esm/tools/base/index.js.map +1 -1
  270. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  271. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +4 -1
  272. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js.map +1 -1
  273. package/dist/esm/tools/displayTools/SegmentationDisplayTool.js +5 -6
  274. package/dist/esm/tools/displayTools/SegmentationDisplayTool.js.map +1 -1
  275. package/dist/esm/tools/index.d.ts +2 -2
  276. package/dist/esm/tools/index.js +2 -2
  277. package/dist/esm/tools/index.js.map +1 -1
  278. package/dist/esm/tools/segmentation/BrushTool.js +25 -18
  279. package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
  280. package/dist/esm/tools/segmentation/PaintFillTool.js +4 -2
  281. package/dist/esm/tools/segmentation/PaintFillTool.js.map +1 -1
  282. package/dist/esm/tools/segmentation/strategies/eraseSphere.d.ts +2 -0
  283. package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  284. package/dist/esm/tools/segmentation/strategies/fillCircle.js +1 -6
  285. package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
  286. package/dist/esm/tools/segmentation/strategies/fillSphere.d.ts +3 -0
  287. package/dist/esm/tools/segmentation/strategies/fillSphere.js +33 -9
  288. package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
  289. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +3 -0
  290. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js +8 -0
  291. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -0
  292. package/dist/esm/types/CINETypes.d.ts +2 -0
  293. package/dist/esm/types/CalculatorTypes.d.ts +6 -0
  294. package/dist/esm/types/CalculatorTypes.js +2 -0
  295. package/dist/esm/types/CalculatorTypes.js.map +1 -0
  296. package/dist/esm/types/EventTypes.d.ts +8 -1
  297. package/dist/esm/types/ISetToolModeOptions.d.ts +2 -2
  298. package/dist/esm/types/IToolGroup.d.ts +3 -2
  299. package/dist/esm/types/ToolProps.d.ts +5 -1
  300. package/dist/esm/types/index.d.ts +3 -2
  301. package/dist/esm/utilities/cine/playClip.js +13 -4
  302. package/dist/esm/utilities/cine/playClip.js.map +1 -1
  303. package/dist/esm/utilities/dynamicVolume/getDataInTime.js +7 -4
  304. package/dist/esm/utilities/dynamicVolume/getDataInTime.js.map +1 -1
  305. package/dist/esm/utilities/getCalibratedUnits.js +10 -5
  306. package/dist/esm/utilities/getCalibratedUnits.js.map +1 -1
  307. package/dist/esm/utilities/math/basic/BasicStatsCalculator.d.ts +14 -0
  308. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +36 -0
  309. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js.map +1 -0
  310. package/dist/esm/utilities/math/basic/Calculator.d.ts +8 -0
  311. package/dist/esm/utilities/math/basic/Calculator.js +4 -0
  312. package/dist/esm/utilities/math/basic/Calculator.js.map +1 -0
  313. package/dist/esm/utilities/math/basic/index.d.ts +3 -0
  314. package/dist/esm/utilities/math/basic/index.js +4 -0
  315. package/dist/esm/utilities/math/basic/index.js.map +1 -0
  316. package/dist/esm/utilities/math/index.d.ts +2 -1
  317. package/dist/esm/utilities/math/index.js +2 -1
  318. package/dist/esm/utilities/math/index.js.map +1 -1
  319. package/dist/esm/utilities/math/midPoint.js +2 -1
  320. package/dist/esm/utilities/math/midPoint.js.map +1 -1
  321. package/dist/esm/utilities/math/polyline/pointInPolyline.js +2 -1
  322. package/dist/esm/utilities/math/polyline/pointInPolyline.js.map +1 -1
  323. package/dist/esm/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
  324. package/dist/esm/utilities/math/vec2/liangBarksyClip.js +10 -5
  325. package/dist/esm/utilities/math/vec2/liangBarksyClip.js.map +1 -1
  326. package/dist/esm/utilities/pointInShapeCallback.d.ts +7 -1
  327. package/dist/esm/utilities/pointInShapeCallback.js +6 -1
  328. package/dist/esm/utilities/pointInShapeCallback.js.map +1 -1
  329. package/dist/esm/utilities/roundNumber.js +4 -2
  330. package/dist/esm/utilities/roundNumber.js.map +1 -1
  331. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.d.ts +2 -2
  332. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js +4 -4
  333. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js.map +1 -1
  334. package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js +2 -1
  335. package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js.map +1 -1
  336. package/dist/esm/utilities/segmentation/utilities.d.ts +1 -2
  337. package/dist/esm/utilities/segmentation/utilities.js +4 -1
  338. package/dist/esm/utilities/segmentation/utilities.js.map +1 -1
  339. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +4 -4
  340. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
  341. package/dist/umd/index.js +1 -1
  342. package/dist/umd/index.js.map +1 -1
  343. package/package.json +3 -3
  344. package/src/drawingSvg/drawCircle.ts +17 -5
  345. package/src/drawingSvg/drawEllipse.ts +4 -4
  346. package/src/drawingSvg/drawHandles.ts +4 -4
  347. package/src/drawingSvg/drawLine.ts +4 -4
  348. package/src/drawingSvg/drawPolyline.ts +4 -4
  349. package/src/drawingSvg/drawRect.ts +4 -4
  350. package/src/drawingSvg/drawTextBox.ts +4 -4
  351. package/src/drawingSvg/index.ts +4 -0
  352. package/src/drawingSvg/{_setAttributesIfNecessary.ts → setAttributesIfNecessary.ts} +2 -2
  353. package/src/drawingSvg/{_setNewAttributesIfValid.ts → setNewAttributesIfValid.ts} +2 -2
  354. package/src/enums/Events.ts +13 -0
  355. package/src/eventDispatchers/shared/getMouseModifier.ts +15 -5
  356. package/src/eventListeners/keyboard/keyDownListener.ts +13 -0
  357. package/src/eventListeners/mouse/mouseDownListener.ts +3 -1
  358. package/src/eventListeners/touch/touchStartListener.ts +15 -5
  359. package/src/index.ts +2 -0
  360. package/src/stateManagement/annotation/config/ToolStyle.ts +1 -0
  361. package/src/stateManagement/annotation/config/getState.ts +7 -3
  362. package/src/stateManagement/annotation/config/helpers.ts +6 -2
  363. package/src/store/SynchronizerManager/Synchronizer.ts +16 -8
  364. package/src/store/ToolGroupManager/ToolGroup.ts +21 -5
  365. package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +3 -1
  366. package/src/synchronizers/callbacks/stackImageSyncCallback.ts +63 -68
  367. package/src/synchronizers/callbacks/voiSyncCallback.ts +1 -1
  368. package/src/tools/MIPJumpToClickTool.ts +6 -2
  369. package/src/tools/PlanarRotateTool.ts +3 -1
  370. package/src/tools/ReferenceCursors.ts +85 -29
  371. package/src/tools/ScaleOverlayTool.ts +3 -1
  372. package/src/tools/annotation/AngleTool.ts +38 -19
  373. package/src/tools/annotation/ArrowAnnotateTool.ts +16 -1
  374. package/src/tools/annotation/BidirectionalTool.ts +37 -23
  375. package/src/tools/annotation/CircleROITool.ts +83 -89
  376. package/src/tools/annotation/CobbAngleTool.ts +31 -16
  377. package/src/tools/annotation/DragProbeTool.ts +19 -1
  378. package/src/tools/annotation/EllipticalROITool.ts +63 -71
  379. package/src/tools/annotation/LengthTool.ts +32 -17
  380. package/src/tools/annotation/PlanarFreehandROITool.ts +56 -59
  381. package/src/tools/annotation/ProbeTool.ts +26 -19
  382. package/src/tools/annotation/RectangleROITool.ts +67 -75
  383. package/src/tools/base/AnnotationTool.ts +39 -17
  384. package/src/tools/base/index.ts +2 -1
  385. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +3 -0
  386. package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +6 -1
  387. package/src/tools/displayTools/SegmentationDisplayTool.ts +12 -18
  388. package/src/tools/index.ts +2 -1
  389. package/src/tools/segmentation/BrushTool.ts +42 -19
  390. package/src/tools/segmentation/PaintFillTool.ts +10 -3
  391. package/src/tools/segmentation/strategies/eraseSphere.ts +2 -0
  392. package/src/tools/segmentation/strategies/fillCircle.ts +1 -13
  393. package/src/tools/segmentation/strategies/fillSphere.ts +56 -8
  394. package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +16 -0
  395. package/src/types/CINETypes.ts +8 -2
  396. package/src/types/CalculatorTypes.ts +7 -0
  397. package/src/types/EventTypes.ts +20 -0
  398. package/src/types/ISetToolModeOptions.ts +2 -2
  399. package/src/types/IToolGroup.ts +6 -3
  400. package/src/types/ToolProps.ts +7 -1
  401. package/src/types/index.ts +9 -1
  402. package/src/utilities/cine/playClip.ts +20 -3
  403. package/src/utilities/dynamicVolume/getDataInTime.ts +9 -6
  404. package/src/utilities/getCalibratedUnits.ts +15 -5
  405. package/src/utilities/math/basic/BasicStatsCalculator.ts +60 -0
  406. package/src/utilities/math/basic/Calculator.ts +8 -0
  407. package/src/utilities/math/basic/index.ts +4 -0
  408. package/src/utilities/math/index.ts +10 -1
  409. package/src/utilities/math/midPoint.ts +3 -1
  410. package/src/utilities/math/polyline/pointInPolyline.ts +3 -1
  411. package/src/utilities/math/vec2/liangBarksyClip.ts +15 -5
  412. package/src/utilities/pointInShapeCallback.ts +15 -3
  413. package/src/utilities/roundNumber.ts +6 -2
  414. package/src/utilities/segmentation/brushSizeForToolGroup.ts +22 -4
  415. package/src/utilities/segmentation/thresholdVolumeByRange.ts +3 -1
  416. package/src/utilities/segmentation/utilities.ts +8 -1
  417. package/src/utilities/stackPrefetch/stackPrefetch.ts +10 -4
  418. package/dist/cjs/drawingSvg/_setAttributesIfNecessary.d.ts +0 -2
  419. package/dist/cjs/drawingSvg/_setAttributesIfNecessary.js.map +0 -1
  420. package/dist/cjs/drawingSvg/_setNewAttributesIfValid.d.ts +0 -2
  421. package/dist/cjs/drawingSvg/_setNewAttributesIfValid.js.map +0 -1
  422. package/dist/esm/drawingSvg/_setAttributesIfNecessary.d.ts +0 -2
  423. package/dist/esm/drawingSvg/_setAttributesIfNecessary.js.map +0 -1
  424. package/dist/esm/drawingSvg/_setNewAttributesIfValid.d.ts +0 -2
  425. package/dist/esm/drawingSvg/_setNewAttributesIfValid.js.map +0 -1
@@ -91,6 +91,7 @@ const { transformWorldToIndex } = csUtils;
91
91
  *
92
92
  * Read more in the Docs section of the website.
93
93
  */
94
+
94
95
  class BidirectionalTool extends AnnotationTool {
95
96
  static toolName;
96
97
 
@@ -115,6 +116,7 @@ class BidirectionalTool extends AnnotationTool {
115
116
  supportedInteractionTypes: ['Mouse', 'Touch'],
116
117
  configuration: {
117
118
  preventHandleOutsideImage: false,
119
+ getTextLines: defaultGetTextLines,
118
120
  },
119
121
  }
120
122
  ) {
@@ -1160,11 +1162,26 @@ class BidirectionalTool extends AnnotationTool {
1160
1162
 
1161
1163
  renderStatus = true;
1162
1164
 
1163
- const textLines = this._getTextLines(data, targetId);
1165
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
1166
+ if (!options.visibility) {
1167
+ data.handles.textBox = {
1168
+ hasMoved: false,
1169
+ worldPosition: <Types.Point3>[0, 0, 0],
1170
+ worldBoundingBox: {
1171
+ topLeft: <Types.Point3>[0, 0, 0],
1172
+ topRight: <Types.Point3>[0, 0, 0],
1173
+ bottomLeft: <Types.Point3>[0, 0, 0],
1174
+ bottomRight: <Types.Point3>[0, 0, 0],
1175
+ },
1176
+ };
1177
+ continue;
1178
+ }
1164
1179
 
1180
+ const textLines = this.configuration.getTextLines(data, targetId);
1165
1181
  if (!textLines || textLines.length === 0) {
1166
1182
  continue;
1167
1183
  }
1184
+
1168
1185
  let canvasTextBoxCoords;
1169
1186
 
1170
1187
  if (!data.handles.textBox.hasMoved) {
@@ -1187,7 +1204,7 @@ class BidirectionalTool extends AnnotationTool {
1187
1204
  textBoxPosition,
1188
1205
  canvasCoordinates,
1189
1206
  {},
1190
- this.getLinkedTextBoxStyle(styleSpecifier, annotation)
1207
+ options
1191
1208
  );
1192
1209
 
1193
1210
  const { x: left, y: top, width, height } = boundingBox;
@@ -1243,27 +1260,6 @@ class BidirectionalTool extends AnnotationTool {
1243
1260
  return wouldPutThroughShortAxis;
1244
1261
  };
1245
1262
 
1246
- /**
1247
- * get text box content
1248
- */
1249
- _getTextLines = (data, targetId) => {
1250
- const { cachedStats } = data;
1251
- const { length, width, unit } = cachedStats[targetId];
1252
-
1253
- if (length === undefined) {
1254
- return;
1255
- }
1256
-
1257
- // spaceBetweenSlices & pixelSpacing &
1258
- // magnitude in each direction? Otherwise, this is "px"?
1259
- const textLines = [
1260
- `L: ${roundNumber(length)} ${unit}`,
1261
- `W: ${roundNumber(width)} ${unit}`,
1262
- ];
1263
-
1264
- return textLines;
1265
- };
1266
-
1267
1263
  _calculateLength(pos1, pos2) {
1268
1264
  const dx = pos1[0] - pos2[0];
1269
1265
  const dy = pos1[1] - pos2[1];
@@ -1351,5 +1347,23 @@ class BidirectionalTool extends AnnotationTool {
1351
1347
  };
1352
1348
  }
1353
1349
 
1350
+ function defaultGetTextLines(data, targetId): string[] {
1351
+ const { cachedStats } = data;
1352
+ const { length, width, unit } = cachedStats[targetId];
1353
+
1354
+ if (length === undefined) {
1355
+ return;
1356
+ }
1357
+
1358
+ // spaceBetweenSlices & pixelSpacing &
1359
+ // magnitude in each direction? Otherwise, this is "px"?
1360
+ const textLines = [
1361
+ `L: ${roundNumber(length)} ${unit}`,
1362
+ `W: ${roundNumber(width)} ${unit}`,
1363
+ ];
1364
+
1365
+ return textLines;
1366
+ }
1367
+
1354
1368
  BidirectionalTool.toolName = 'Bidirectional';
1355
1369
  export default BidirectionalTool;
@@ -68,6 +68,7 @@ import {
68
68
  getCanvasCircleRadius,
69
69
  } from '../../utilities/math/circle';
70
70
  import { pointInEllipse } from '../../utilities/math/ellipse';
71
+ import { BasicStatsCalculator } from '../../utilities/math/basic';
71
72
 
72
73
  const { transformWorldToIndex } = csUtils;
73
74
 
@@ -117,8 +118,10 @@ const { transformWorldToIndex } = csUtils;
117
118
  *
118
119
  * Read more in the Docs section of the website.
119
120
  */
121
+
120
122
  class CircleROITool extends AnnotationTool {
121
123
  static toolName;
124
+
122
125
  touchDragCallback: any;
123
126
  mouseDragCallback: any;
124
127
  _throttledCalculateCachedStats: any;
@@ -143,6 +146,8 @@ class CircleROITool extends AnnotationTool {
143
146
  // Radius of the circle to draw at the center point of the circle.
144
147
  // Set this zero(0) in order not to draw the circle.
145
148
  centerPointRadius: 0,
149
+ getTextLines: defaultGetTextLines,
150
+ statsCalculator: BasicStatsCalculator,
146
151
  },
147
152
  }
148
153
  ) {
@@ -281,7 +286,9 @@ class CircleROITool extends AnnotationTool {
281
286
  canvasCoords,
282
287
  ]);
283
288
 
284
- if (Math.abs(radiusPoint - radius) < proximity / 2) return true;
289
+ if (Math.abs(radiusPoint - radius) < proximity / 2) {
290
+ return true;
291
+ }
285
292
 
286
293
  return false;
287
294
  };
@@ -819,7 +826,22 @@ class CircleROITool extends AnnotationTool {
819
826
 
820
827
  renderStatus = true;
821
828
 
822
- const textLines = this._getTextLines(data, targetId);
829
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
830
+ if (!options.visibility) {
831
+ data.handles.textBox = {
832
+ hasMoved: false,
833
+ worldPosition: <Types.Point3>[0, 0, 0],
834
+ worldBoundingBox: {
835
+ topLeft: <Types.Point3>[0, 0, 0],
836
+ topRight: <Types.Point3>[0, 0, 0],
837
+ bottomLeft: <Types.Point3>[0, 0, 0],
838
+ bottomRight: <Types.Point3>[0, 0, 0],
839
+ },
840
+ };
841
+ continue;
842
+ }
843
+
844
+ const textLines = this.configuration.getTextLines(data, targetId);
823
845
  if (!textLines || textLines.length === 0) {
824
846
  continue;
825
847
  }
@@ -847,7 +869,7 @@ class CircleROITool extends AnnotationTool {
847
869
  textBoxPosition,
848
870
  canvasCoordinates,
849
871
  {},
850
- this.getLinkedTextBoxStyle(styleSpecifier, annotation)
872
+ options
851
873
  );
852
874
 
853
875
  const { x: left, y: top, width, height } = boundingBox;
@@ -863,52 +885,6 @@ class CircleROITool extends AnnotationTool {
863
885
  return renderStatus;
864
886
  };
865
887
 
866
- _getTextLines = (data, targetId: string): string[] => {
867
- const cachedVolumeStats = data.cachedStats[targetId];
868
- const {
869
- radius,
870
- radiusUnit,
871
- area,
872
- mean,
873
- stdDev,
874
- max,
875
- isEmptyArea,
876
- Modality,
877
- areaUnit,
878
- modalityUnit,
879
- } = cachedVolumeStats;
880
-
881
- const textLines: string[] = [];
882
-
883
- if (radius) {
884
- const radiusLine = isEmptyArea
885
- ? `Radius: Oblique not supported`
886
- : `Radius: ${roundNumber(radius)} ${radiusUnit}`;
887
- textLines.push(radiusLine);
888
- }
889
-
890
- if (area) {
891
- const areaLine = isEmptyArea
892
- ? `Area: Oblique not supported`
893
- : `Area: ${roundNumber(area)} ${areaUnit}`;
894
- textLines.push(areaLine);
895
- }
896
-
897
- if (mean) {
898
- textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
899
- }
900
-
901
- if (max) {
902
- textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
903
- }
904
-
905
- if (stdDev) {
906
- textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
907
- }
908
-
909
- return textLines;
910
- };
911
-
912
888
  _calculateCachedStats = (
913
889
  annotation,
914
890
  viewport,
@@ -1009,57 +985,29 @@ class CircleROITool extends AnnotationTool {
1009
985
  (worldHeight / aspect / scale / 2)
1010
986
  );
1011
987
 
1012
- let count = 0;
1013
- let mean = 0;
1014
- let stdDev = 0;
1015
- let max = -Infinity;
1016
-
1017
- const meanMaxCalculator = ({ value: newValue }) => {
1018
- if (newValue > max) {
1019
- max = newValue;
1020
- }
1021
-
1022
- mean += newValue;
1023
- count += 1;
1024
- };
1025
-
1026
- pointInShapeCallback(
1027
- imageData,
1028
- (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
1029
- meanMaxCalculator,
1030
- boundsIJK
988
+ const modalityUnit = getModalityUnit(
989
+ metadata.Modality,
990
+ annotation.metadata.referencedImageId,
991
+ modalityUnitOptions
1031
992
  );
1032
993
 
1033
- mean /= count;
1034
-
1035
- const stdCalculator = ({ value }) => {
1036
- const valueMinusMean = value - mean;
1037
-
1038
- stdDev += valueMinusMean * valueMinusMean;
1039
- };
1040
-
1041
- pointInShapeCallback(
994
+ const pointsInShape = pointInShapeCallback(
1042
995
  imageData,
1043
996
  (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
1044
- stdCalculator,
997
+ this.configuration.statsCalculator.statsCallback,
1045
998
  boundsIJK
1046
999
  );
1047
1000
 
1048
- stdDev /= count;
1049
- stdDev = Math.sqrt(stdDev);
1050
-
1051
- const modalityUnit = getModalityUnit(
1052
- metadata.Modality,
1053
- annotation.metadata.referencedImageId,
1054
- modalityUnitOptions
1055
- );
1001
+ const stats = this.configuration.statsCalculator.getStatistics();
1056
1002
 
1057
1003
  cachedStats[targetId] = {
1058
1004
  Modality: metadata.Modality,
1059
1005
  area,
1060
- mean,
1061
- max,
1062
- stdDev,
1006
+ mean: stats[1]?.value,
1007
+ max: stats[0]?.value,
1008
+ stdDev: stats[2]?.value,
1009
+ statsArray: stats,
1010
+ pointsInShape: pointsInShape,
1063
1011
  isEmptyArea,
1064
1012
  areaUnit: getCalibratedAreaUnits(null, image),
1065
1013
  radius: worldWidth / 2 / scale,
@@ -1100,5 +1048,51 @@ class CircleROITool extends AnnotationTool {
1100
1048
  };
1101
1049
  }
1102
1050
 
1051
+ function defaultGetTextLines(data, targetId): string[] {
1052
+ const cachedVolumeStats = data.cachedStats[targetId];
1053
+ const {
1054
+ radius,
1055
+ radiusUnit,
1056
+ area,
1057
+ mean,
1058
+ stdDev,
1059
+ max,
1060
+ isEmptyArea,
1061
+ Modality,
1062
+ areaUnit,
1063
+ modalityUnit,
1064
+ } = cachedVolumeStats;
1065
+
1066
+ const textLines: string[] = [];
1067
+
1068
+ if (radius) {
1069
+ const radiusLine = isEmptyArea
1070
+ ? `Radius: Oblique not supported`
1071
+ : `Radius: ${roundNumber(radius)} ${radiusUnit}`;
1072
+ textLines.push(radiusLine);
1073
+ }
1074
+
1075
+ if (area) {
1076
+ const areaLine = isEmptyArea
1077
+ ? `Area: Oblique not supported`
1078
+ : `Area: ${roundNumber(area)} ${areaUnit}`;
1079
+ textLines.push(areaLine);
1080
+ }
1081
+
1082
+ if (mean) {
1083
+ textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
1084
+ }
1085
+
1086
+ if (max) {
1087
+ textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
1088
+ }
1089
+
1090
+ if (stdDev) {
1091
+ textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
1092
+ }
1093
+
1094
+ return textLines;
1095
+ }
1096
+
1103
1097
  CircleROITool.toolName = 'CircleROI';
1104
1098
  export default CircleROITool;
@@ -75,6 +75,7 @@ class CobbAngleTool extends AnnotationTool {
75
75
  configuration: {
76
76
  shadow: true,
77
77
  preventHandleOutsideImage: false,
78
+ getTextLines: defaultGetTextLines,
78
79
  },
79
80
  }
80
81
  ) {
@@ -769,7 +770,22 @@ class CobbAngleTool extends AnnotationTool {
769
770
  continue;
770
771
  }
771
772
 
772
- const textLines = this._getTextLines(data, targetId);
773
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
774
+ if (!options.visibility) {
775
+ data.handles.textBox = {
776
+ hasMoved: false,
777
+ worldPosition: <Types.Point3>[0, 0, 0],
778
+ worldBoundingBox: {
779
+ topLeft: <Types.Point3>[0, 0, 0],
780
+ topRight: <Types.Point3>[0, 0, 0],
781
+ bottomLeft: <Types.Point3>[0, 0, 0],
782
+ bottomRight: <Types.Point3>[0, 0, 0],
783
+ },
784
+ };
785
+ continue;
786
+ }
787
+
788
+ const textLines = this.configuration.getTextLines(data, targetId);
773
789
 
774
790
  if (!data.handles.textBox.hasMoved) {
775
791
  const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates);
@@ -791,7 +807,7 @@ class CobbAngleTool extends AnnotationTool {
791
807
  textBoxPosition,
792
808
  canvasCoordinates,
793
809
  {},
794
- this.getLinkedTextBoxStyle(styleSpecifier, annotation)
810
+ options
795
811
  );
796
812
 
797
813
  const { x: left, y: top, width, height } = boundingBox;
@@ -807,20 +823,6 @@ class CobbAngleTool extends AnnotationTool {
807
823
  return renderStatus;
808
824
  };
809
825
 
810
- // text line for the current active angle annotation
811
- _getTextLines(data, targetId) {
812
- const cachedVolumeStats = data.cachedStats[targetId];
813
- const { angle } = cachedVolumeStats;
814
-
815
- if (angle === undefined) {
816
- return;
817
- }
818
-
819
- const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
820
-
821
- return textLines;
822
- }
823
-
824
826
  _calculateCachedStats(annotation, renderingEngine, enabledElement) {
825
827
  const data = annotation.data;
826
828
  const { viewportId, renderingEngineId } = enabledElement;
@@ -886,5 +888,18 @@ class CobbAngleTool extends AnnotationTool {
886
888
  }
887
889
  }
888
890
 
891
+ function defaultGetTextLines(data, targetId): string[] {
892
+ const cachedVolumeStats = data.cachedStats[targetId];
893
+ const { angle } = cachedVolumeStats;
894
+
895
+ if (angle === undefined) {
896
+ return;
897
+ }
898
+
899
+ const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
900
+
901
+ return textLines;
902
+ }
903
+
889
904
  CobbAngleTool.toolName = 'CobbAngle';
890
905
  export default CobbAngleTool;
@@ -44,6 +44,7 @@ class DragProbeTool extends ProbeTool {
44
44
  configuration: {
45
45
  shadow: true,
46
46
  preventHandleOutsideImage: false,
47
+ getTextLines: defaultGetTextLines,
47
48
  },
48
49
  }
49
50
  ) {
@@ -205,7 +206,7 @@ class DragProbeTool extends ProbeTool {
205
206
 
206
207
  renderStatus = true;
207
208
 
208
- const textLines = this._getTextLines(data, targetId);
209
+ const textLines = this.configuration.getTextLines(data, targetId);
209
210
  if (textLines) {
210
211
  const textCanvasCoordinates = [
211
212
  canvasCoordinates[0] + 6,
@@ -227,5 +228,22 @@ class DragProbeTool extends ProbeTool {
227
228
  };
228
229
  }
229
230
 
231
+ function defaultGetTextLines(data, targetId): string[] {
232
+ const cachedVolumeStats = data.cachedStats[targetId];
233
+ const { index, value, modalityUnit } = cachedVolumeStats;
234
+
235
+ if (value === undefined) {
236
+ return;
237
+ }
238
+
239
+ const textLines = [];
240
+
241
+ textLines.push(`(${index[0]}, ${index[1]}, ${index[2]})`);
242
+
243
+ textLines.push(`${value.toFixed(2)} ${modalityUnit}`);
244
+
245
+ return textLines;
246
+ }
247
+
230
248
  DragProbeTool.toolName = 'DragProbe';
231
249
  export default DragProbeTool;
@@ -66,6 +66,7 @@ import {
66
66
  getModalityUnit,
67
67
  } from '../../utilities/getModalityUnit';
68
68
  import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
69
+ import { BasicStatsCalculator } from '../../utilities/math/basic';
69
70
 
70
71
  const { transformWorldToIndex } = csUtils;
71
72
 
@@ -115,8 +116,10 @@ const { transformWorldToIndex } = csUtils;
115
116
  *
116
117
  * Read more in the Docs section of the website.
117
118
  */
119
+
118
120
  class EllipticalROITool extends AnnotationTool {
119
121
  static toolName;
122
+
120
123
  touchDragCallback: any;
121
124
  mouseDragCallback: any;
122
125
  _throttledCalculateCachedStats: any;
@@ -145,6 +148,8 @@ class EllipticalROITool extends AnnotationTool {
145
148
  // Radius of the circle to draw at the center point of the ellipse.
146
149
  // Set this zero(0) in order not to draw the circle.
147
150
  centerPointRadius: 0,
151
+ getTextLines: defaultGetTextLines,
152
+ statsCalculator: BasicStatsCalculator,
148
153
  },
149
154
  }
150
155
  ) {
@@ -945,7 +950,22 @@ class EllipticalROITool extends AnnotationTool {
945
950
 
946
951
  renderStatus = true;
947
952
 
948
- const textLines = this._getTextLines(data, targetId);
953
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
954
+ if (!options.visibility) {
955
+ data.handles.textBox = {
956
+ hasMoved: false,
957
+ worldPosition: <Types.Point3>[0, 0, 0],
958
+ worldBoundingBox: {
959
+ topLeft: <Types.Point3>[0, 0, 0],
960
+ topRight: <Types.Point3>[0, 0, 0],
961
+ bottomLeft: <Types.Point3>[0, 0, 0],
962
+ bottomRight: <Types.Point3>[0, 0, 0],
963
+ },
964
+ };
965
+ continue;
966
+ }
967
+
968
+ const textLines = this.configuration.getTextLines(data, targetId);
949
969
  if (!textLines || textLines.length === 0) {
950
970
  continue;
951
971
  }
@@ -973,7 +993,7 @@ class EllipticalROITool extends AnnotationTool {
973
993
  textBoxPosition,
974
994
  canvasCoordinates,
975
995
  {},
976
- this.getLinkedTextBoxStyle(styleSpecifier, annotation)
996
+ options
977
997
  );
978
998
 
979
999
  const { x: left, y: top, width, height } = boundingBox;
@@ -989,35 +1009,6 @@ class EllipticalROITool extends AnnotationTool {
989
1009
  return renderStatus;
990
1010
  };
991
1011
 
992
- _getTextLines = (data, targetId: string): string[] => {
993
- const cachedVolumeStats = data.cachedStats[targetId];
994
- const { area, mean, stdDev, max, isEmptyArea, areaUnit, modalityUnit } =
995
- cachedVolumeStats;
996
-
997
- const textLines: string[] = [];
998
-
999
- if (area) {
1000
- const areaLine = isEmptyArea
1001
- ? `Area: Oblique not supported`
1002
- : `Area: ${roundNumber(area)} ${areaUnit}`;
1003
- textLines.push(areaLine);
1004
- }
1005
-
1006
- if (mean) {
1007
- textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
1008
- }
1009
-
1010
- if (max) {
1011
- textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
1012
- }
1013
-
1014
- if (stdDev) {
1015
- textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
1016
- }
1017
-
1018
- return textLines;
1019
- };
1020
-
1021
1012
  _calculateCachedStats = (
1022
1013
  annotation,
1023
1014
  viewport,
@@ -1116,57 +1107,29 @@ class EllipticalROITool extends AnnotationTool {
1116
1107
  scale /
1117
1108
  scale;
1118
1109
 
1119
- let count = 0;
1120
- let mean = 0;
1121
- let stdDev = 0;
1122
- let max = -Infinity;
1123
-
1124
- const meanMaxCalculator = ({ value: newValue }) => {
1125
- if (newValue > max) {
1126
- max = newValue;
1127
- }
1128
-
1129
- mean += newValue;
1130
- count += 1;
1131
- };
1132
-
1133
- pointInShapeCallback(
1134
- imageData,
1135
- (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
1136
- meanMaxCalculator,
1137
- boundsIJK
1110
+ const modalityUnit = getModalityUnit(
1111
+ metadata.Modality,
1112
+ annotation.metadata.referencedImageId,
1113
+ modalityUnitOptions
1138
1114
  );
1139
1115
 
1140
- mean /= count;
1141
-
1142
- const stdCalculator = ({ value }) => {
1143
- const valueMinusMean = value - mean;
1144
-
1145
- stdDev += valueMinusMean * valueMinusMean;
1146
- };
1147
-
1148
- pointInShapeCallback(
1116
+ const pointsInShape = pointInShapeCallback(
1149
1117
  imageData,
1150
1118
  (pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
1151
- stdCalculator,
1119
+ this.configuration.statsCalculator.statsCallback,
1152
1120
  boundsIJK
1153
1121
  );
1154
1122
 
1155
- stdDev /= count;
1156
- stdDev = Math.sqrt(stdDev);
1157
-
1158
- const modalityUnit = getModalityUnit(
1159
- metadata.Modality,
1160
- annotation.metadata.referencedImageId,
1161
- modalityUnitOptions
1162
- );
1123
+ const stats = this.configuration.statsCalculator.getStatistics();
1163
1124
 
1164
1125
  cachedStats[targetId] = {
1165
1126
  Modality: metadata.Modality,
1166
1127
  area,
1167
- mean,
1168
- max,
1169
- stdDev,
1128
+ mean: stats[1]?.value,
1129
+ max: stats[0]?.value,
1130
+ stdDev: stats[2]?.value,
1131
+ statsArray: stats,
1132
+ pointsInShape: pointsInShape,
1170
1133
  isEmptyArea,
1171
1134
  areaUnit: getCalibratedAreaUnits(null, image),
1172
1135
  modalityUnit,
@@ -1248,5 +1211,34 @@ class EllipticalROITool extends AnnotationTool {
1248
1211
  }
1249
1212
  }
1250
1213
 
1214
+ function defaultGetTextLines(data, targetId): string[] {
1215
+ const cachedVolumeStats = data.cachedStats[targetId];
1216
+ const { area, mean, stdDev, max, isEmptyArea, areaUnit, modalityUnit } =
1217
+ cachedVolumeStats;
1218
+
1219
+ const textLines: string[] = [];
1220
+
1221
+ if (area) {
1222
+ const areaLine = isEmptyArea
1223
+ ? `Area: Oblique not supported`
1224
+ : `Area: ${roundNumber(area)} ${areaUnit}`;
1225
+ textLines.push(areaLine);
1226
+ }
1227
+
1228
+ if (mean) {
1229
+ textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
1230
+ }
1231
+
1232
+ if (max) {
1233
+ textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
1234
+ }
1235
+
1236
+ if (stdDev) {
1237
+ textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
1238
+ }
1239
+
1240
+ return textLines;
1241
+ }
1242
+
1251
1243
  EllipticalROITool.toolName = 'EllipticalROI';
1252
1244
  export default EllipticalROITool;