@cornerstonejs/tools 1.51.5 → 1.53.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 (339) hide show
  1. package/dist/cjs/drawingSvg/drawPath.d.ts +11 -0
  2. package/dist/cjs/drawingSvg/drawPath.js +55 -0
  3. package/dist/cjs/drawingSvg/drawPath.js.map +1 -0
  4. package/dist/cjs/drawingSvg/drawPolyline.d.ts +1 -1
  5. package/dist/cjs/drawingSvg/drawPolyline.js +3 -11
  6. package/dist/cjs/drawingSvg/drawPolyline.js.map +1 -1
  7. package/dist/cjs/drawingSvg/index.d.ts +2 -1
  8. package/dist/cjs/drawingSvg/index.js +3 -1
  9. package/dist/cjs/drawingSvg/index.js.map +1 -1
  10. package/dist/cjs/enums/ChangeTypes.d.ts +2 -1
  11. package/dist/cjs/enums/ChangeTypes.js +1 -0
  12. package/dist/cjs/enums/ChangeTypes.js.map +1 -1
  13. package/dist/cjs/eventDispatchers/keyboardEventHandlers/keyDown.js +1 -1
  14. package/dist/cjs/eventDispatchers/keyboardEventHandlers/keyDown.js.map +1 -1
  15. package/dist/cjs/eventDispatchers/shared/getActiveToolForMouseEvent.js.map +1 -1
  16. package/dist/cjs/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts +1 -1
  17. package/dist/cjs/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +165 -78
  18. package/dist/cjs/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js.map +1 -1
  19. package/dist/cjs/stateManagement/annotation/annotationState.d.ts +6 -1
  20. package/dist/cjs/stateManagement/annotation/annotationState.js +49 -1
  21. package/dist/cjs/stateManagement/annotation/annotationState.js.map +1 -1
  22. package/dist/cjs/stateManagement/annotation/helpers/state.d.ts +4 -2
  23. package/dist/cjs/stateManagement/annotation/helpers/state.js +16 -4
  24. package/dist/cjs/stateManagement/annotation/helpers/state.js.map +1 -1
  25. package/dist/cjs/stateManagement/index.d.ts +6 -1
  26. package/dist/cjs/stateManagement/index.js +6 -1
  27. package/dist/cjs/stateManagement/index.js.map +1 -1
  28. package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +3 -1
  29. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +3 -2
  30. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  31. package/dist/cjs/tools/SegmentationIntersectionTool.js +1 -1
  32. package/dist/cjs/tools/SegmentationIntersectionTool.js.map +1 -1
  33. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.d.ts +4 -0
  34. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js +82 -0
  35. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js.map +1 -1
  36. package/dist/cjs/tools/annotation/LivewireContourTool.d.ts +13 -11
  37. package/dist/cjs/tools/annotation/LivewireContourTool.js +78 -65
  38. package/dist/cjs/tools/annotation/LivewireContourTool.js.map +1 -1
  39. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +3 -1
  40. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  41. package/dist/cjs/tools/annotation/SplineROITool.d.ts +6 -3
  42. package/dist/cjs/tools/annotation/SplineROITool.js +40 -21
  43. package/dist/cjs/tools/annotation/SplineROITool.js.map +1 -1
  44. package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +12 -7
  45. package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
  46. package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js +24 -18
  47. package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
  48. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js +16 -10
  49. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
  50. package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js +19 -7
  51. package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
  52. package/dist/cjs/tools/annotation/splines/LinearSpline.js +1 -1
  53. package/dist/cjs/tools/annotation/splines/LinearSpline.js.map +1 -1
  54. package/dist/cjs/tools/annotation/splines/Spline.d.ts +2 -0
  55. package/dist/cjs/tools/annotation/splines/Spline.js +7 -3
  56. package/dist/cjs/tools/annotation/splines/Spline.js.map +1 -1
  57. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  58. package/dist/cjs/tools/base/ContourBaseTool.d.ts +1 -0
  59. package/dist/cjs/tools/base/ContourBaseTool.js +18 -1
  60. package/dist/cjs/tools/base/ContourBaseTool.js.map +1 -1
  61. package/dist/cjs/tools/base/ContourSegmentationBaseTool.js +4 -0
  62. package/dist/cjs/tools/base/ContourSegmentationBaseTool.js.map +1 -1
  63. package/dist/cjs/tools/displayTools/Contour/contourConfig.js +1 -0
  64. package/dist/cjs/tools/displayTools/Contour/contourConfig.js.map +1 -1
  65. package/dist/cjs/types/AnnotationTypes.d.ts +2 -0
  66. package/dist/cjs/types/ContourAnnotation.d.ts +6 -0
  67. package/dist/cjs/types/ContourAnnotation.js +7 -0
  68. package/dist/cjs/types/ContourAnnotation.js.map +1 -1
  69. package/dist/cjs/types/ContourSegmentationAnnotation.d.ts +8 -0
  70. package/dist/cjs/types/ContourTypes.d.ts +1 -0
  71. package/dist/cjs/types/EventTypes.d.ts +4 -1
  72. package/dist/cjs/types/ISpline.d.ts +1 -0
  73. package/dist/cjs/types/InterpolationTypes.d.ts +2 -0
  74. package/dist/cjs/types/SplineProps.d.ts +1 -0
  75. package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +2 -5
  76. package/dist/cjs/utilities/contours/getContourHolesDataCanvas.d.ts +3 -0
  77. package/dist/cjs/utilities/contours/getContourHolesDataCanvas.js +21 -0
  78. package/dist/cjs/utilities/contours/getContourHolesDataCanvas.js.map +1 -0
  79. package/dist/cjs/utilities/contours/getContourHolesDataWorld.d.ts +3 -0
  80. package/dist/cjs/utilities/contours/getContourHolesDataWorld.js +10 -0
  81. package/dist/cjs/utilities/contours/getContourHolesDataWorld.js.map +1 -0
  82. package/dist/cjs/utilities/contours/index.d.ts +4 -1
  83. package/dist/cjs/utilities/contours/index.js +7 -1
  84. package/dist/cjs/utilities/contours/index.js.map +1 -1
  85. package/dist/cjs/utilities/contours/interpolation/acceptAutogeneratedInterpolations.js.map +1 -1
  86. package/dist/cjs/utilities/contours/interpolation/createPolylineToolData.js +2 -1
  87. package/dist/cjs/utilities/contours/interpolation/createPolylineToolData.js.map +1 -1
  88. package/dist/cjs/utilities/contours/interpolation/findAnnotationForInterpolation.js +2 -1
  89. package/dist/cjs/utilities/contours/interpolation/findAnnotationForInterpolation.js.map +1 -1
  90. package/dist/cjs/utilities/contours/interpolation/getInterpolationData.js +3 -1
  91. package/dist/cjs/utilities/contours/interpolation/getInterpolationData.js.map +1 -1
  92. package/dist/cjs/utilities/contours/interpolation/interpolate.d.ts +8 -0
  93. package/dist/cjs/utilities/contours/interpolation/interpolate.js +56 -42
  94. package/dist/cjs/utilities/contours/interpolation/interpolate.js.map +1 -1
  95. package/dist/cjs/utilities/contours/interpolation/selectHandles.d.ts +4 -0
  96. package/dist/cjs/utilities/contours/interpolation/selectHandles.js +170 -0
  97. package/dist/cjs/utilities/contours/interpolation/selectHandles.js.map +1 -0
  98. package/dist/cjs/utilities/contours/updateContourPolyline.d.ts +10 -0
  99. package/dist/cjs/utilities/contours/updateContourPolyline.js +64 -0
  100. package/dist/cjs/utilities/contours/updateContourPolyline.js.map +1 -0
  101. package/dist/cjs/utilities/livewire/LivewireScissors.d.ts +2 -1
  102. package/dist/cjs/utilities/livewire/LivewireScissors.js +46 -24
  103. package/dist/cjs/utilities/livewire/LivewireScissors.js.map +1 -1
  104. package/dist/cjs/utilities/math/polyline/containsPoints.d.ts +2 -0
  105. package/dist/cjs/utilities/math/polyline/containsPoints.js +16 -0
  106. package/dist/cjs/utilities/math/polyline/containsPoints.js.map +1 -0
  107. package/dist/cjs/utilities/math/polyline/getWindingDirection.d.ts +2 -0
  108. package/dist/cjs/utilities/math/polyline/getWindingDirection.js +12 -0
  109. package/dist/cjs/utilities/math/polyline/getWindingDirection.js.map +1 -0
  110. package/dist/cjs/utilities/math/polyline/index.d.ts +3 -1
  111. package/dist/cjs/utilities/math/polyline/index.js +5 -1
  112. package/dist/cjs/utilities/math/polyline/index.js.map +1 -1
  113. package/dist/cjs/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts +1 -0
  114. package/dist/cjs/utilities/segmentation/InterpolationManager/InterpolationManager.js +13 -3
  115. package/dist/cjs/utilities/segmentation/InterpolationManager/InterpolationManager.js.map +1 -1
  116. package/dist/esm/drawingSvg/drawPath.js +49 -0
  117. package/dist/esm/drawingSvg/drawPath.js.map +1 -0
  118. package/dist/esm/drawingSvg/drawPolyline.js +3 -11
  119. package/dist/esm/drawingSvg/drawPolyline.js.map +1 -1
  120. package/dist/esm/drawingSvg/index.js +2 -1
  121. package/dist/esm/drawingSvg/index.js.map +1 -1
  122. package/dist/esm/enums/ChangeTypes.js +1 -0
  123. package/dist/esm/enums/ChangeTypes.js.map +1 -1
  124. package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.js +1 -1
  125. package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.js.map +1 -1
  126. package/dist/esm/eventDispatchers/shared/getActiveToolForMouseEvent.js.map +1 -1
  127. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +106 -32
  128. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js.map +1 -1
  129. package/dist/esm/stateManagement/annotation/annotationState.js +42 -1
  130. package/dist/esm/stateManagement/annotation/annotationState.js.map +1 -1
  131. package/dist/esm/stateManagement/annotation/helpers/state.js +15 -4
  132. package/dist/esm/stateManagement/annotation/helpers/state.js.map +1 -1
  133. package/dist/esm/stateManagement/index.js +2 -2
  134. package/dist/esm/stateManagement/index.js.map +1 -1
  135. package/dist/esm/store/ToolGroupManager/ToolGroup.js +3 -2
  136. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  137. package/dist/esm/tools/SegmentationIntersectionTool.js +1 -1
  138. package/dist/esm/tools/SegmentationIntersectionTool.js.map +1 -1
  139. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +81 -0
  140. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js.map +1 -1
  141. package/dist/esm/tools/annotation/LivewireContourTool.js +80 -67
  142. package/dist/esm/tools/annotation/LivewireContourTool.js.map +1 -1
  143. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +3 -1
  144. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  145. package/dist/esm/tools/annotation/SplineROITool.js +40 -22
  146. package/dist/esm/tools/annotation/SplineROITool.js.map +1 -1
  147. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +12 -7
  148. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
  149. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js +25 -19
  150. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
  151. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js +16 -10
  152. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
  153. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js +20 -8
  154. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
  155. package/dist/esm/tools/annotation/splines/LinearSpline.js +1 -1
  156. package/dist/esm/tools/annotation/splines/LinearSpline.js.map +1 -1
  157. package/dist/esm/tools/annotation/splines/Spline.js +5 -1
  158. package/dist/esm/tools/annotation/splines/Spline.js.map +1 -1
  159. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  160. package/dist/esm/tools/base/ContourBaseTool.js +20 -3
  161. package/dist/esm/tools/base/ContourBaseTool.js.map +1 -1
  162. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +4 -0
  163. package/dist/esm/tools/base/ContourSegmentationBaseTool.js.map +1 -1
  164. package/dist/esm/tools/displayTools/Contour/contourConfig.js +1 -0
  165. package/dist/esm/tools/displayTools/Contour/contourConfig.js.map +1 -1
  166. package/dist/esm/types/ContourAnnotation.js +6 -1
  167. package/dist/esm/types/ContourAnnotation.js.map +1 -1
  168. package/dist/esm/utilities/contours/getContourHolesDataCanvas.js +15 -0
  169. package/dist/esm/utilities/contours/getContourHolesDataCanvas.js.map +1 -0
  170. package/dist/esm/utilities/contours/getContourHolesDataWorld.js +6 -0
  171. package/dist/esm/utilities/contours/getContourHolesDataWorld.js.map +1 -0
  172. package/dist/esm/utilities/contours/index.js +4 -1
  173. package/dist/esm/utilities/contours/index.js.map +1 -1
  174. package/dist/esm/utilities/contours/interpolation/acceptAutogeneratedInterpolations.js.map +1 -1
  175. package/dist/esm/utilities/contours/interpolation/createPolylineToolData.js +2 -1
  176. package/dist/esm/utilities/contours/interpolation/createPolylineToolData.js.map +1 -1
  177. package/dist/esm/utilities/contours/interpolation/findAnnotationForInterpolation.js +2 -1
  178. package/dist/esm/utilities/contours/interpolation/findAnnotationForInterpolation.js.map +1 -1
  179. package/dist/esm/utilities/contours/interpolation/getInterpolationData.js +3 -1
  180. package/dist/esm/utilities/contours/interpolation/getInterpolationData.js.map +1 -1
  181. package/dist/esm/utilities/contours/interpolation/interpolate.js +57 -43
  182. package/dist/esm/utilities/contours/interpolation/interpolate.js.map +1 -1
  183. package/dist/esm/utilities/contours/interpolation/selectHandles.js +164 -0
  184. package/dist/esm/utilities/contours/interpolation/selectHandles.js.map +1 -0
  185. package/dist/esm/utilities/contours/updateContourPolyline.js +38 -0
  186. package/dist/esm/utilities/contours/updateContourPolyline.js.map +1 -0
  187. package/dist/esm/utilities/livewire/LivewireScissors.js +46 -24
  188. package/dist/esm/utilities/livewire/LivewireScissors.js.map +1 -1
  189. package/dist/esm/utilities/math/polyline/containsPoints.js +10 -0
  190. package/dist/esm/utilities/math/polyline/containsPoints.js.map +1 -0
  191. package/dist/esm/utilities/math/polyline/getWindingDirection.js +6 -0
  192. package/dist/esm/utilities/math/polyline/getWindingDirection.js.map +1 -0
  193. package/dist/esm/utilities/math/polyline/index.js +3 -1
  194. package/dist/esm/utilities/math/polyline/index.js.map +1 -1
  195. package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.js +13 -3
  196. package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.js.map +1 -1
  197. package/dist/types/drawingSvg/drawPath.d.ts +12 -0
  198. package/dist/types/drawingSvg/drawPath.d.ts.map +1 -0
  199. package/dist/types/drawingSvg/drawPolyline.d.ts +1 -1
  200. package/dist/types/drawingSvg/drawPolyline.d.ts.map +1 -1
  201. package/dist/types/drawingSvg/index.d.ts +2 -1
  202. package/dist/types/drawingSvg/index.d.ts.map +1 -1
  203. package/dist/types/enums/ChangeTypes.d.ts +2 -1
  204. package/dist/types/enums/ChangeTypes.d.ts.map +1 -1
  205. package/dist/types/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts +1 -1
  206. package/dist/types/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts.map +1 -1
  207. package/dist/types/stateManagement/annotation/annotationState.d.ts +6 -1
  208. package/dist/types/stateManagement/annotation/annotationState.d.ts.map +1 -1
  209. package/dist/types/stateManagement/annotation/helpers/state.d.ts +4 -2
  210. package/dist/types/stateManagement/annotation/helpers/state.d.ts.map +1 -1
  211. package/dist/types/stateManagement/index.d.ts +6 -1
  212. package/dist/types/store/ToolGroupManager/ToolGroup.d.ts +3 -1
  213. package/dist/types/store/ToolGroupManager/ToolGroup.d.ts.map +1 -1
  214. package/dist/types/tools/annotation/LivewireContourSegmentationTool.d.ts +4 -0
  215. package/dist/types/tools/annotation/LivewireContourSegmentationTool.d.ts.map +1 -1
  216. package/dist/types/tools/annotation/LivewireContourTool.d.ts +13 -11
  217. package/dist/types/tools/annotation/LivewireContourTool.d.ts.map +1 -1
  218. package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts.map +1 -1
  219. package/dist/types/tools/annotation/SplineROITool.d.ts +6 -3
  220. package/dist/types/tools/annotation/SplineROITool.d.ts.map +1 -1
  221. package/dist/types/tools/annotation/planarFreehandROITool/closedContourEditLoop.d.ts.map +1 -1
  222. package/dist/types/tools/annotation/planarFreehandROITool/drawLoop.d.ts.map +1 -1
  223. package/dist/types/tools/annotation/planarFreehandROITool/openContourEditLoop.d.ts.map +1 -1
  224. package/dist/types/tools/annotation/planarFreehandROITool/renderMethods.d.ts.map +1 -1
  225. package/dist/types/tools/annotation/splines/Spline.d.ts +2 -0
  226. package/dist/types/tools/annotation/splines/Spline.d.ts.map +1 -1
  227. package/dist/types/tools/base/AnnotationTool.d.ts.map +1 -1
  228. package/dist/types/tools/base/ContourBaseTool.d.ts +1 -0
  229. package/dist/types/tools/base/ContourBaseTool.d.ts.map +1 -1
  230. package/dist/types/tools/base/ContourSegmentationBaseTool.d.ts.map +1 -1
  231. package/dist/types/tools/displayTools/Contour/contourConfig.d.ts.map +1 -1
  232. package/dist/types/types/AnnotationTypes.d.ts +2 -0
  233. package/dist/types/types/AnnotationTypes.d.ts.map +1 -1
  234. package/dist/types/types/ContourAnnotation.d.ts +6 -0
  235. package/dist/types/types/ContourAnnotation.d.ts.map +1 -1
  236. package/dist/types/types/ContourSegmentationAnnotation.d.ts +8 -0
  237. package/dist/types/types/ContourSegmentationAnnotation.d.ts.map +1 -1
  238. package/dist/types/types/ContourTypes.d.ts +1 -0
  239. package/dist/types/types/ContourTypes.d.ts.map +1 -1
  240. package/dist/types/types/EventTypes.d.ts +4 -1
  241. package/dist/types/types/EventTypes.d.ts.map +1 -1
  242. package/dist/types/types/ISpline.d.ts +1 -0
  243. package/dist/types/types/ISpline.d.ts.map +1 -1
  244. package/dist/types/types/InterpolationTypes.d.ts +2 -0
  245. package/dist/types/types/InterpolationTypes.d.ts.map +1 -1
  246. package/dist/types/types/SplineProps.d.ts +1 -0
  247. package/dist/types/types/SplineProps.d.ts.map +1 -1
  248. package/dist/types/types/ToolSpecificAnnotationTypes.d.ts +2 -5
  249. package/dist/types/types/ToolSpecificAnnotationTypes.d.ts.map +1 -1
  250. package/dist/types/utilities/contours/getContourHolesDataCanvas.d.ts +4 -0
  251. package/dist/types/utilities/contours/getContourHolesDataCanvas.d.ts.map +1 -0
  252. package/dist/types/utilities/contours/getContourHolesDataWorld.d.ts +4 -0
  253. package/dist/types/utilities/contours/getContourHolesDataWorld.d.ts.map +1 -0
  254. package/dist/types/utilities/contours/index.d.ts +4 -1
  255. package/dist/types/utilities/contours/index.d.ts.map +1 -1
  256. package/dist/types/utilities/contours/interpolation/acceptAutogeneratedInterpolations.d.ts.map +1 -1
  257. package/dist/types/utilities/contours/interpolation/createPolylineToolData.d.ts.map +1 -1
  258. package/dist/types/utilities/contours/interpolation/findAnnotationForInterpolation.d.ts.map +1 -1
  259. package/dist/types/utilities/contours/interpolation/getInterpolationData.d.ts.map +1 -1
  260. package/dist/types/utilities/contours/interpolation/interpolate.d.ts +8 -0
  261. package/dist/types/utilities/contours/interpolation/interpolate.d.ts.map +1 -1
  262. package/dist/types/utilities/contours/interpolation/selectHandles.d.ts +5 -0
  263. package/dist/types/utilities/contours/interpolation/selectHandles.d.ts.map +1 -0
  264. package/dist/types/utilities/contours/updateContourPolyline.d.ts +11 -0
  265. package/dist/types/utilities/contours/updateContourPolyline.d.ts.map +1 -0
  266. package/dist/types/utilities/livewire/LivewireScissors.d.ts +2 -1
  267. package/dist/types/utilities/livewire/LivewireScissors.d.ts.map +1 -1
  268. package/dist/types/utilities/math/polyline/containsPoints.d.ts +3 -0
  269. package/dist/types/utilities/math/polyline/containsPoints.d.ts.map +1 -0
  270. package/dist/types/utilities/math/polyline/getWindingDirection.d.ts +3 -0
  271. package/dist/types/utilities/math/polyline/getWindingDirection.d.ts.map +1 -0
  272. package/dist/types/utilities/math/polyline/index.d.ts +3 -1
  273. package/dist/types/utilities/math/polyline/index.d.ts.map +1 -1
  274. package/dist/types/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts +1 -0
  275. package/dist/types/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts.map +1 -1
  276. package/dist/types/utilities/segmentation/InterpolationManager/InterpolationManager.d.ts.map +1 -1
  277. package/dist/umd/index.js +1 -1
  278. package/dist/umd/index.js.map +1 -1
  279. package/package.json +3 -3
  280. package/src/drawingSvg/drawPath.ts +96 -0
  281. package/src/drawingSvg/drawPolyline.ts +13 -17
  282. package/src/drawingSvg/index.ts +2 -0
  283. package/src/enums/ChangeTypes.ts +4 -0
  284. package/src/eventDispatchers/keyboardEventHandlers/keyDown.ts +1 -1
  285. package/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +1 -1
  286. package/src/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.ts +194 -58
  287. package/src/stateManagement/annotation/annotationState.ts +101 -0
  288. package/src/stateManagement/annotation/helpers/state.ts +33 -3
  289. package/src/stateManagement/index.js +10 -0
  290. package/src/store/ToolGroupManager/ToolGroup.ts +9 -2
  291. package/src/tools/SegmentationIntersectionTool.ts +1 -1
  292. package/src/tools/annotation/LivewireContourSegmentationTool.ts +151 -0
  293. package/src/tools/annotation/LivewireContourTool.ts +172 -114
  294. package/src/tools/annotation/PlanarFreehandROITool.ts +13 -3
  295. package/src/tools/annotation/SplineROITool.ts +78 -31
  296. package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +20 -11
  297. package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +40 -21
  298. package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +28 -13
  299. package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +28 -10
  300. package/src/tools/annotation/splines/LinearSpline.ts +1 -1
  301. package/src/tools/annotation/splines/Spline.ts +13 -1
  302. package/src/tools/base/AnnotationTool.ts +1 -0
  303. package/src/tools/base/ContourBaseTool.ts +45 -3
  304. package/src/tools/base/ContourSegmentationBaseTool.ts +6 -0
  305. package/src/tools/displayTools/Contour/contourConfig.ts +1 -0
  306. package/src/types/AnnotationTypes.ts +14 -0
  307. package/src/types/ContourAnnotation.ts +13 -0
  308. package/src/types/ContourSegmentationAnnotation.ts +38 -0
  309. package/src/types/ContourTypes.ts +3 -0
  310. package/src/types/EventTypes.ts +9 -0
  311. package/src/types/ISpline.ts +3 -0
  312. package/src/types/InterpolationTypes.ts +6 -0
  313. package/src/types/SplineProps.ts +10 -0
  314. package/src/types/ToolSpecificAnnotationTypes.ts +7 -5
  315. package/src/utilities/contours/getContourHolesDataCanvas.ts +33 -0
  316. package/src/utilities/contours/getContourHolesDataWorld.ts +19 -0
  317. package/src/utilities/contours/index.ts +6 -0
  318. package/src/utilities/contours/interpolation/acceptAutogeneratedInterpolations.ts +3 -1
  319. package/src/utilities/contours/interpolation/createPolylineToolData.ts +7 -1
  320. package/src/utilities/contours/interpolation/findAnnotationForInterpolation.ts +2 -1
  321. package/src/utilities/contours/interpolation/getInterpolationData.ts +3 -1
  322. package/src/utilities/contours/interpolation/interpolate.ts +94 -75
  323. package/src/utilities/contours/interpolation/selectHandles.ts +240 -0
  324. package/src/utilities/contours/updateContourPolyline.ts +74 -0
  325. package/src/utilities/livewire/LivewireScissors.ts +65 -53
  326. package/src/utilities/math/polyline/containsPoint.ts +1 -1
  327. package/src/utilities/math/polyline/containsPoints.ts +22 -0
  328. package/src/utilities/math/polyline/getWindingDirection.ts +14 -0
  329. package/src/utilities/math/polyline/index.ts +4 -0
  330. package/src/utilities/math/polyline/planarFreehandROIInternalTypes.ts +1 -0
  331. package/src/utilities/segmentation/InterpolationManager/InterpolationManager.ts +39 -4
  332. package/dist/cjs/utilities/contours/PointsArray.d.ts +0 -29
  333. package/dist/cjs/utilities/contours/PointsArray.js +0 -104
  334. package/dist/cjs/utilities/contours/PointsArray.js.map +0 -1
  335. package/dist/esm/utilities/contours/PointsArray.js +0 -98
  336. package/dist/esm/utilities/contours/PointsArray.js.map +0 -1
  337. package/dist/types/utilities/contours/PointsArray.d.ts +0 -30
  338. package/dist/types/utilities/contours/PointsArray.d.ts.map +0 -1
  339. package/src/utilities/contours/PointsArray.ts +0 -165
@@ -59,6 +59,81 @@ function getAnnotations(
59
59
  return manager.getAnnotations(groupKey, toolName) as Annotations;
60
60
  }
61
61
 
62
+ /**
63
+ * Removes the association between the annotation passed as parameter and its
64
+ * parent in case it has one (eg: contour holes).
65
+ * @param annotation - Annotation
66
+ */
67
+ function clearParentAnnotation(annotation: Annotation): void {
68
+ const { annotationUID: childUID, parentAnnotationUID } = annotation;
69
+
70
+ if (!parentAnnotationUID) {
71
+ return;
72
+ }
73
+
74
+ const parentAnnotation = getAnnotation(parentAnnotationUID);
75
+ const childUIDIndex = parentAnnotation.childAnnotationUIDs.indexOf(childUID);
76
+
77
+ parentAnnotation.childAnnotationUIDs.splice(childUIDIndex, 1);
78
+ annotation.parentAnnotationUID = undefined;
79
+ }
80
+
81
+ /**
82
+ * Creates a parent/child association between annotations.
83
+ * A annotation may have only one parent and multiple children (eg: a contour
84
+ * may have multiple holes in it).
85
+ * @param parentAnnotation - Parent annotation
86
+ * @param childAnnotation - Child annotation
87
+ */
88
+ function addChildAnnotation(
89
+ parentAnnotation: Annotation,
90
+ childAnnotation: Annotation
91
+ ): void {
92
+ const { annotationUID: parentUID } = parentAnnotation;
93
+ const { annotationUID: childUID } = childAnnotation;
94
+
95
+ // Make sure it is not associated with any other tool
96
+ clearParentAnnotation(childAnnotation);
97
+
98
+ if (!parentAnnotation.childAnnotationUIDs) {
99
+ parentAnnotation.childAnnotationUIDs = [];
100
+ }
101
+
102
+ // Check if it is already a child
103
+ if (parentAnnotation.childAnnotationUIDs.includes(childUID)) {
104
+ return;
105
+ }
106
+
107
+ parentAnnotation.childAnnotationUIDs.push(childUID);
108
+ childAnnotation.parentAnnotationUID = parentUID;
109
+ }
110
+
111
+ /**
112
+ * Returns the parent annotation of a given one since annotations can be
113
+ * associated in a parent/child way (eg: polyline holes)
114
+ * @param annotation - Annotation
115
+ * @returns Parent annotation
116
+ */
117
+ function getParentAnnotation(annotation: Annotation) {
118
+ return annotation.parentAnnotationUID
119
+ ? getAnnotation(annotation.parentAnnotationUID)
120
+ : undefined;
121
+ }
122
+
123
+ /**
124
+ * Returns all children annotation of a given one since annotations can be
125
+ * associated in a parent/child way (eg: polyline holes)
126
+ * @param annotation - Annotation
127
+ * @returns Child annotations
128
+ */
129
+ function getChildAnnotations(annotation: Annotation) {
130
+ return (
131
+ annotation.childAnnotationUIDs?.map((childAnnotationUID) =>
132
+ getAnnotation(childAnnotationUID)
133
+ ) ?? []
134
+ );
135
+ }
136
+
62
137
  /**
63
138
  * Add the annotation to the annotation manager along with the options that is
64
139
  * used to filter the annotation manager and the annotation group that
@@ -137,6 +212,11 @@ function removeAnnotation(annotationUID: string): void {
137
212
  return;
138
213
  }
139
214
 
215
+ // Remove all child annotations first
216
+ annotation.childAnnotationUIDs?.forEach((childAnnotationUID) =>
217
+ removeAnnotation(childAnnotationUID)
218
+ );
219
+
140
220
  manager.removeAnnotation(annotationUID);
141
221
 
142
222
  // trigger annotation removed
@@ -169,8 +249,28 @@ function removeAllAnnotations(): void {
169
249
  manager.removeAllAnnotations();
170
250
  }
171
251
 
252
+ /**
253
+ * Invalidate current and all parent annotations (eg: contour holes)
254
+ * @param annotation - Annotation
255
+ */
256
+ function invalidateAnnotation(annotation: Annotation): void {
257
+ let currAnnotation = annotation;
258
+
259
+ while (currAnnotation) {
260
+ currAnnotation.invalidated = true;
261
+
262
+ currAnnotation = currAnnotation.parentAnnotationUID
263
+ ? getAnnotation(currAnnotation.parentAnnotationUID)
264
+ : undefined;
265
+ }
266
+ }
267
+
172
268
  export {
173
269
  getAnnotations,
270
+ getParentAnnotation,
271
+ getChildAnnotations,
272
+ clearParentAnnotation,
273
+ addChildAnnotation,
174
274
  getNumberOfAnnotations,
175
275
  addAnnotation,
176
276
  getAnnotation,
@@ -180,4 +280,5 @@ export {
180
280
  setAnnotationManager,
181
281
  getAnnotationManager,
182
282
  resetAnnotationManager,
283
+ invalidateAnnotation,
183
284
  };
@@ -4,13 +4,14 @@ import {
4
4
  eventTarget,
5
5
  getEnabledElementByIds,
6
6
  } from '@cornerstonejs/core';
7
- import { Events } from '../../../enums';
7
+ import { Events, ChangeTypes } from '../../../enums';
8
8
  import { Annotation } from '../../../types/AnnotationTypes';
9
9
  import { getToolGroupsWithToolName } from '../../../store/ToolGroupManager';
10
10
  import {
11
11
  AnnotationAddedEventDetail,
12
12
  AnnotationModifiedEventDetail,
13
13
  AnnotationCompletedEventDetail,
14
+ ContourAnnotationCompletedEventDetail,
14
15
  } from '../../../types/EventTypes';
15
16
 
16
17
  /**
@@ -85,7 +86,8 @@ function triggerAnnotationAddedForFOR(annotation: Annotation) {
85
86
  */
86
87
  function triggerAnnotationModified(
87
88
  annotation: Annotation,
88
- element: HTMLDivElement
89
+ element: HTMLDivElement,
90
+ changeType = ChangeTypes.HandlesUpdated
89
91
  ): void {
90
92
  const enabledElement = getEnabledElement(element);
91
93
  const { viewportId, renderingEngineId } = enabledElement;
@@ -94,6 +96,7 @@ function triggerAnnotationModified(
94
96
  annotation,
95
97
  viewportId,
96
98
  renderingEngineId,
99
+ changeType,
97
100
  };
98
101
 
99
102
  triggerEvent(eventTarget, eventType, eventDetail);
@@ -103,11 +106,37 @@ function triggerAnnotationModified(
103
106
  * Triggers an annotation completed event.
104
107
  */
105
108
  function triggerAnnotationCompleted(annotation: Annotation): void {
106
- const eventType = Events.ANNOTATION_COMPLETED;
107
109
  const eventDetail: AnnotationCompletedEventDetail = {
108
110
  annotation,
109
111
  };
110
112
 
113
+ _triggerAnnotationCompleted(eventDetail);
114
+ }
115
+
116
+ /**
117
+ * Triggers an annotation completed event for contours (same annotation completed
118
+ * event but with more specific details).
119
+ */
120
+ function triggerContourAnnotationCompleted(
121
+ annotation: Annotation,
122
+ contourHoleProcessingEnabled = false
123
+ ): void {
124
+ const eventDetail: ContourAnnotationCompletedEventDetail = {
125
+ annotation,
126
+ contourHoleProcessingEnabled,
127
+ };
128
+
129
+ _triggerAnnotationCompleted(eventDetail);
130
+ }
131
+
132
+ /**
133
+ * Triggers an annotation completed event for the `detail` provided
134
+ * @param eventDetail - Event detail
135
+ */
136
+ function _triggerAnnotationCompleted(
137
+ eventDetail: AnnotationCompletedEventDetail
138
+ ) {
139
+ const eventType = Events.ANNOTATION_COMPLETED;
111
140
  triggerEvent(eventTarget, eventType, eventDetail);
112
141
  }
113
142
 
@@ -116,4 +145,5 @@ export {
116
145
  triggerAnnotationAddedForFOR,
117
146
  triggerAnnotationModified,
118
147
  triggerAnnotationCompleted,
148
+ triggerContourAnnotationCompleted,
119
149
  };
@@ -9,10 +9,15 @@ import {
9
9
  addAnnotation,
10
10
  removeAnnotation,
11
11
  getAnnotation,
12
+ getParentAnnotation,
13
+ getChildAnnotations,
14
+ clearParentAnnotation,
15
+ addChildAnnotation,
12
16
  getNumberOfAnnotations,
13
17
  setAnnotationManager,
14
18
  getAnnotationManager,
15
19
  resetAnnotationManager,
20
+ invalidateAnnotation,
16
21
  } from './annotation/annotationState';
17
22
 
18
23
  import {
@@ -31,9 +36,14 @@ export {
31
36
  getNumberOfAnnotations,
32
37
  removeAnnotation,
33
38
  getAnnotation,
39
+ getParentAnnotation,
40
+ getChildAnnotations,
41
+ clearParentAnnotation,
42
+ addChildAnnotation,
34
43
  setAnnotationManager,
35
44
  getAnnotationManager,
36
45
  resetAnnotationManager,
46
+ invalidateAnnotation,
37
47
  // segmentations
38
48
  addSegmentationRepresentations,
39
49
  removeSegmentationsFromToolGroup,
@@ -418,8 +418,14 @@ export default class ToolGroup implements IToolGroup {
418
418
  * - Renders data if the tool has a `renderAnnotation` method.
419
419
  *
420
420
  * @param toolName - tool name
421
+ * @param options - Options used when setting the tool as passive
422
+ * - removeAllBindings: only the primary button bindings are removed but
423
+ * if this parameter is set to true all bindings are removed.
421
424
  */
422
- public setToolPassive(toolName: string): void {
425
+ public setToolPassive(
426
+ toolName: string,
427
+ options?: { removeAllBindings?: boolean }
428
+ ): void {
423
429
  const toolInstance = this._toolInstances[toolName];
424
430
 
425
431
  if (toolInstance === undefined) {
@@ -448,7 +454,8 @@ export default class ToolGroup implements IToolGroup {
448
454
  // Remove the primary button bindings without modifiers, if they exist
449
455
  toolOptions.bindings = toolOptions.bindings.filter(
450
456
  (binding) =>
451
- binding.mouseButton !== defaultMousePrimary || binding.modifierKey
457
+ options?.removeAllBindings !== true &&
458
+ (binding.mouseButton !== defaultMousePrimary || binding.modifierKey)
452
459
  );
453
460
  // If there are other bindings, set the tool to be active
454
461
  let mode = Passive;
@@ -146,7 +146,7 @@ class SegmentationIntersectionTool extends AnnotationDisplayTool {
146
146
  color: color,
147
147
  fillColor: color,
148
148
  fillOpacity: this.configuration.opacity,
149
- connectLastToFirst: true,
149
+ closePath: true,
150
150
  };
151
151
 
152
152
  const polyLineUID = actorEntry.uid + '#' + polyLineIdx;
@@ -1,8 +1,159 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import { utilities as csUtils } from '@cornerstonejs/core';
3
+
1
4
  import LivewireContourTool from './LivewireContourTool';
5
+ import { LivewirePath } from '../../utilities/livewire/LiveWirePath';
6
+ import { triggerAnnotationModified } from '../../stateManagement/annotation/helpers/state';
7
+ import { ChangeTypes } from '../../enums';
8
+ import type { ContourSegmentationAnnotation } from '../../types';
9
+ import { drawPolyline as drawPolylineSvg } from '../../drawingSvg';
2
10
 
3
11
  class LivewireContourSegmentationTool extends LivewireContourTool {
4
12
  static toolName;
5
13
 
14
+ /**
15
+ * Updates the interpolated annotations with the currently displayed image data,
16
+ * performing hte livewire on the image data as generated.
17
+ * Note - this function is only called for interpolated livewire SEGMENTATION
18
+ * objects, and will return immediately otherwise.
19
+ *
20
+ * The work for the interpolation is performed in a microtask, enabling this
21
+ * method to return quickly for faster render speeds, but ensuring that the
22
+ * annotation data isn't updated before the changes are performed. The removes
23
+ * some irritating flickering on navigation.
24
+ */
25
+ public updateInterpolatedAnnotation(
26
+ annotation: ContourSegmentationAnnotation,
27
+ enabledElement: Types.IEnabledElement
28
+ ) {
29
+ // The interpolation sources is used as a flag here - a true livewire
30
+ // behaviour would be to perform a livewire between the two planes
31
+ // closest to this plane for each point, and use that handle. That is
32
+ // oblique, however, which is not currently supported.
33
+ if (
34
+ this.editData ||
35
+ !annotation.invalidated ||
36
+ !annotation.data.handles.interpolationSources
37
+ ) {
38
+ return;
39
+ }
40
+ annotation.data.contour.originalPolyline = annotation.data.contour.polyline;
41
+
42
+ // See docs above for why this is a microtask
43
+ queueMicrotask(() => {
44
+ if (!annotation.data.handles.interpolationSources) {
45
+ return;
46
+ }
47
+ const { points } = annotation.data.handles;
48
+
49
+ const { element } = enabledElement.viewport;
50
+ this.setupBaseEditData(points[0], element, annotation);
51
+ const { length: count } = points;
52
+ const { scissors } = this;
53
+ const { nearestEdge, repeatInterpolation } =
54
+ this.configuration.interpolation;
55
+ annotation.data.handles.originalPoints = points;
56
+ const { worldToSlice, sliceToWorld } = this.editData;
57
+ const handleSmoothing = [];
58
+
59
+ // New path generation - go through the handles and regenerate the polyline
60
+ if (nearestEdge) {
61
+ let lastPoint = worldToSlice(points[points.length - 1]);
62
+ // Nearest edge handling
63
+ points.forEach((point, hIndex) => {
64
+ const testPoint = worldToSlice(point);
65
+ lastPoint = testPoint;
66
+ handleSmoothing.push(testPoint);
67
+
68
+ // Fill the costs buffer and then find the minimum cost
69
+ // This is a little too aggressive about pulling the line in
70
+ scissors.startSearch(lastPoint);
71
+ scissors.findPathToPoint(testPoint);
72
+ // Fill the costs for a point a bit further along by searching for a
73
+ // point further along.
74
+ scissors.findPathToPoint(
75
+ worldToSlice(points[(hIndex + 3) % points.length])
76
+ );
77
+ const minPoint = scissors.findMinNearby(testPoint, nearestEdge);
78
+ if (!csUtils.isEqual(testPoint, minPoint)) {
79
+ handleSmoothing[hIndex] = minPoint;
80
+ lastPoint = minPoint;
81
+ points[hIndex] = sliceToWorld(minPoint);
82
+ }
83
+ });
84
+ }
85
+
86
+ // Regenerate the updated data based on the updated handles
87
+ const acceptedPath = new LivewirePath();
88
+ for (let i = 0; i < count; i++) {
89
+ scissors.startSearch(worldToSlice(points[i]));
90
+ const path = scissors.findPathToPoint(
91
+ worldToSlice(points[(i + 1) % count])
92
+ );
93
+ acceptedPath.addPoints(path);
94
+ }
95
+
96
+ // Now, update the rendering
97
+ this.updateAnnotation(acceptedPath);
98
+ this.scissors = null;
99
+ this.scissorsRight = null;
100
+ this.editData = null;
101
+ annotation.data.handles.interpolationSources = null;
102
+
103
+ if (repeatInterpolation) {
104
+ triggerAnnotationModified(
105
+ annotation,
106
+ enabledElement.viewport.element,
107
+ ChangeTypes.InterpolationUpdated
108
+ );
109
+ }
110
+ });
111
+ }
112
+
113
+ /**
114
+ * Adds the update to the interpolated annotaiton on render an instance,
115
+ * but otherwise just calls the parent render annotation instance.
116
+ */
117
+ protected renderAnnotationInstance(renderContext): boolean {
118
+ const { enabledElement, svgDrawingHelper } = renderContext;
119
+ const annotation =
120
+ renderContext.annotation as ContourSegmentationAnnotation;
121
+ const { annotationUID } = annotation;
122
+ const { viewport } = enabledElement;
123
+ const { worldToCanvas } = viewport;
124
+ const { showInterpolationPolyline } =
125
+ this.configuration.interpolation || {};
126
+
127
+ this.updateInterpolatedAnnotation?.(annotation, enabledElement);
128
+ const { originalPolyline } = annotation.data.contour;
129
+
130
+ const rendered = super.renderAnnotationInstance(renderContext);
131
+
132
+ if (
133
+ showInterpolationPolyline &&
134
+ originalPolyline &&
135
+ annotation.autoGenerated
136
+ ) {
137
+ const polylineCanvasPoints = originalPolyline.map(
138
+ worldToCanvas
139
+ ) as Types.Point2[];
140
+ polylineCanvasPoints.push(polylineCanvasPoints[0]);
141
+ drawPolylineSvg(
142
+ svgDrawingHelper,
143
+ annotationUID,
144
+ 'interpolationContour-0',
145
+ polylineCanvasPoints,
146
+ {
147
+ color: '#70ffff',
148
+ lineWidth: 1,
149
+ fillOpacity: 0,
150
+ }
151
+ );
152
+ }
153
+
154
+ return rendered;
155
+ }
156
+
6
157
  protected isContourSegmentationTool(): boolean {
7
158
  // Re-enable contour segmentation behavior disabled by LivewireContourTool
8
159
  return true;