@cornerstonejs/tools 1.43.7 → 1.44.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 (252) hide show
  1. package/dist/cjs/index.d.ts +2 -2
  2. package/dist/cjs/index.js +5 -2
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.d.ts +3 -1
  5. package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.js +7 -2
  6. package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.js.map +1 -1
  7. package/dist/cjs/stateManagement/segmentation/config/segmentationVisibility.d.ts +2 -1
  8. package/dist/cjs/stateManagement/segmentation/config/segmentationVisibility.js +23 -9
  9. package/dist/cjs/stateManagement/segmentation/config/segmentationVisibility.js.map +1 -1
  10. package/dist/cjs/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +14 -1
  11. package/dist/cjs/stateManagement/segmentation/helpers/normalizeSegmentationInput.js.map +1 -1
  12. package/dist/cjs/tools/annotation/AngleTool.js +4 -3
  13. package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
  14. package/dist/cjs/tools/annotation/ArrowAnnotateTool.js +4 -3
  15. package/dist/cjs/tools/annotation/ArrowAnnotateTool.js.map +1 -1
  16. package/dist/cjs/tools/annotation/BidirectionalTool.js +4 -4
  17. package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
  18. package/dist/cjs/tools/annotation/CircleROITool.js +4 -3
  19. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  20. package/dist/cjs/tools/annotation/CobbAngleTool.js +4 -3
  21. package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
  22. package/dist/cjs/tools/annotation/DragProbeTool.js +4 -1
  23. package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
  24. package/dist/cjs/tools/annotation/EllipticalROITool.js +4 -3
  25. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  26. package/dist/cjs/tools/annotation/KeyImageTool.js +4 -1
  27. package/dist/cjs/tools/annotation/KeyImageTool.js.map +1 -1
  28. package/dist/cjs/tools/annotation/LengthTool.js +4 -4
  29. package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
  30. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.d.ts +6 -0
  31. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js +14 -0
  32. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js.map +1 -0
  33. package/dist/cjs/tools/annotation/LivewireContourTool.d.ts +14 -5
  34. package/dist/cjs/tools/annotation/LivewireContourTool.js +126 -159
  35. package/dist/cjs/tools/annotation/LivewireContourTool.js.map +1 -1
  36. package/dist/cjs/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts +8 -0
  37. package/dist/cjs/tools/annotation/PlanarFreehandContourSegmentationTool.js +24 -0
  38. package/dist/cjs/tools/annotation/PlanarFreehandContourSegmentationTool.js.map +1 -0
  39. package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +16 -6
  40. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +104 -134
  41. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  42. package/dist/cjs/tools/annotation/ProbeTool.js +1 -1
  43. package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
  44. package/dist/cjs/tools/annotation/RectangleROITool.js +4 -3
  45. package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
  46. package/dist/cjs/tools/annotation/SplineContourSegmentationTool.d.ts +8 -0
  47. package/dist/cjs/tools/annotation/SplineContourSegmentationTool.js +23 -0
  48. package/dist/cjs/tools/annotation/SplineContourSegmentationTool.js.map +1 -0
  49. package/dist/cjs/tools/annotation/SplineROITool.d.ts +15 -8
  50. package/dist/cjs/tools/annotation/SplineROITool.js +168 -240
  51. package/dist/cjs/tools/annotation/SplineROITool.js.map +1 -1
  52. package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +5 -5
  53. package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
  54. package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js +4 -4
  55. package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
  56. package/dist/cjs/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js +1 -1
  57. package/dist/cjs/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js.map +1 -1
  58. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js +7 -7
  59. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
  60. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js +1 -1
  61. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js.map +1 -1
  62. package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js +19 -15
  63. package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
  64. package/dist/cjs/tools/base/AnnotationTool.d.ts +15 -0
  65. package/dist/cjs/tools/base/AnnotationTool.js +24 -0
  66. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  67. package/dist/cjs/tools/base/ContourBaseTool.d.ts +19 -0
  68. package/dist/cjs/tools/base/ContourBaseTool.js +130 -0
  69. package/dist/cjs/tools/base/ContourBaseTool.js.map +1 -0
  70. package/dist/cjs/tools/base/ContourSegmentationBaseTool.d.ts +18 -0
  71. package/dist/cjs/tools/base/ContourSegmentationBaseTool.js +139 -0
  72. package/dist/cjs/tools/base/ContourSegmentationBaseTool.js.map +1 -0
  73. package/dist/cjs/tools/displayTools/Contour/contourDisplay.js +1 -0
  74. package/dist/cjs/tools/displayTools/Contour/contourDisplay.js.map +1 -1
  75. package/dist/cjs/tools/index.d.ts +4 -1
  76. package/dist/cjs/tools/index.js +7 -1
  77. package/dist/cjs/tools/index.js.map +1 -1
  78. package/dist/cjs/types/ContourAnnotation.d.ts +11 -0
  79. package/dist/cjs/types/ContourAnnotation.js +3 -0
  80. package/dist/cjs/types/ContourAnnotation.js.map +1 -0
  81. package/dist/cjs/types/ContourSegmentationAnnotation.d.ts +11 -0
  82. package/dist/cjs/types/ContourSegmentationAnnotation.js +3 -0
  83. package/dist/cjs/types/ContourSegmentationAnnotation.js.map +1 -0
  84. package/dist/cjs/types/ContourTypes.d.ts +4 -1
  85. package/dist/cjs/types/SegmentationStateTypes.d.ts +1 -1
  86. package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +11 -52
  87. package/dist/cjs/types/index.d.ts +3 -1
  88. package/dist/cjs/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
  89. package/dist/esm/index.js +2 -2
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +7 -2
  92. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js.map +1 -1
  93. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +20 -7
  94. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js.map +1 -1
  95. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +13 -1
  96. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js.map +1 -1
  97. package/dist/esm/tools/annotation/AngleTool.js +4 -3
  98. package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
  99. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +4 -3
  100. package/dist/esm/tools/annotation/ArrowAnnotateTool.js.map +1 -1
  101. package/dist/esm/tools/annotation/BidirectionalTool.js +4 -4
  102. package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
  103. package/dist/esm/tools/annotation/CircleROITool.js +4 -3
  104. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  105. package/dist/esm/tools/annotation/CobbAngleTool.js +4 -3
  106. package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
  107. package/dist/esm/tools/annotation/DragProbeTool.js +4 -1
  108. package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
  109. package/dist/esm/tools/annotation/EllipticalROITool.js +4 -3
  110. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  111. package/dist/esm/tools/annotation/KeyImageTool.js +4 -1
  112. package/dist/esm/tools/annotation/KeyImageTool.js.map +1 -1
  113. package/dist/esm/tools/annotation/LengthTool.js +4 -4
  114. package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
  115. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +9 -0
  116. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js.map +1 -0
  117. package/dist/esm/tools/annotation/LivewireContourTool.js +123 -160
  118. package/dist/esm/tools/annotation/LivewireContourTool.js.map +1 -1
  119. package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js +19 -0
  120. package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js.map +1 -0
  121. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +104 -134
  122. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  123. package/dist/esm/tools/annotation/ProbeTool.js +1 -1
  124. package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
  125. package/dist/esm/tools/annotation/RectangleROITool.js +4 -3
  126. package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
  127. package/dist/esm/tools/annotation/SplineContourSegmentationTool.js +18 -0
  128. package/dist/esm/tools/annotation/SplineContourSegmentationTool.js.map +1 -0
  129. package/dist/esm/tools/annotation/SplineROITool.js +153 -227
  130. package/dist/esm/tools/annotation/SplineROITool.js.map +1 -1
  131. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +5 -5
  132. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
  133. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js +4 -4
  134. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
  135. package/dist/esm/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js +1 -1
  136. package/dist/esm/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js.map +1 -1
  137. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js +7 -7
  138. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
  139. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js +1 -1
  140. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js.map +1 -1
  141. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js +19 -15
  142. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
  143. package/dist/esm/tools/base/AnnotationTool.js +24 -0
  144. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  145. package/dist/esm/tools/base/ContourBaseTool.js +122 -0
  146. package/dist/esm/tools/base/ContourBaseTool.js.map +1 -0
  147. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +131 -0
  148. package/dist/esm/tools/base/ContourSegmentationBaseTool.js.map +1 -0
  149. package/dist/esm/tools/displayTools/Contour/contourDisplay.js +1 -0
  150. package/dist/esm/tools/displayTools/Contour/contourDisplay.js.map +1 -1
  151. package/dist/esm/tools/index.js +4 -1
  152. package/dist/esm/tools/index.js.map +1 -1
  153. package/dist/esm/types/ContourAnnotation.js +2 -0
  154. package/dist/esm/types/ContourAnnotation.js.map +1 -0
  155. package/dist/esm/types/ContourSegmentationAnnotation.js +2 -0
  156. package/dist/esm/types/ContourSegmentationAnnotation.js.map +1 -0
  157. package/dist/types/index.d.ts +2 -2
  158. package/dist/types/index.d.ts.map +1 -1
  159. package/dist/types/stateManagement/segmentation/SegmentationStateManager.d.ts +3 -1
  160. package/dist/types/stateManagement/segmentation/SegmentationStateManager.d.ts.map +1 -1
  161. package/dist/types/stateManagement/segmentation/config/segmentationVisibility.d.ts +2 -1
  162. package/dist/types/stateManagement/segmentation/config/segmentationVisibility.d.ts.map +1 -1
  163. package/dist/types/stateManagement/segmentation/helpers/normalizeSegmentationInput.d.ts.map +1 -1
  164. package/dist/types/tools/annotation/AngleTool.d.ts.map +1 -1
  165. package/dist/types/tools/annotation/ArrowAnnotateTool.d.ts.map +1 -1
  166. package/dist/types/tools/annotation/CircleROITool.d.ts.map +1 -1
  167. package/dist/types/tools/annotation/CobbAngleTool.d.ts.map +1 -1
  168. package/dist/types/tools/annotation/DragProbeTool.d.ts.map +1 -1
  169. package/dist/types/tools/annotation/EllipticalROITool.d.ts.map +1 -1
  170. package/dist/types/tools/annotation/KeyImageTool.d.ts.map +1 -1
  171. package/dist/types/tools/annotation/LengthTool.d.ts.map +1 -1
  172. package/dist/types/tools/annotation/LivewireContourSegmentationTool.d.ts +7 -0
  173. package/dist/types/tools/annotation/LivewireContourSegmentationTool.d.ts.map +1 -0
  174. package/dist/types/tools/annotation/LivewireContourTool.d.ts +14 -5
  175. package/dist/types/tools/annotation/LivewireContourTool.d.ts.map +1 -1
  176. package/dist/types/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts +9 -0
  177. package/dist/types/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts.map +1 -0
  178. package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts +16 -6
  179. package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts.map +1 -1
  180. package/dist/types/tools/annotation/RectangleROITool.d.ts.map +1 -1
  181. package/dist/types/tools/annotation/SplineContourSegmentationTool.d.ts +9 -0
  182. package/dist/types/tools/annotation/SplineContourSegmentationTool.d.ts.map +1 -0
  183. package/dist/types/tools/annotation/SplineROITool.d.ts +15 -8
  184. package/dist/types/tools/annotation/SplineROITool.d.ts.map +1 -1
  185. package/dist/types/tools/annotation/planarFreehandROITool/closedContourEditLoop.d.ts.map +1 -1
  186. package/dist/types/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.d.ts.map +1 -1
  187. package/dist/types/tools/annotation/planarFreehandROITool/openContourEditLoop.d.ts.map +1 -1
  188. package/dist/types/tools/annotation/planarFreehandROITool/openContourEndEditLoop.d.ts.map +1 -1
  189. package/dist/types/tools/annotation/planarFreehandROITool/renderMethods.d.ts.map +1 -1
  190. package/dist/types/tools/base/AnnotationTool.d.ts +15 -0
  191. package/dist/types/tools/base/AnnotationTool.d.ts.map +1 -1
  192. package/dist/types/tools/base/ContourBaseTool.d.ts +20 -0
  193. package/dist/types/tools/base/ContourBaseTool.d.ts.map +1 -0
  194. package/dist/types/tools/base/ContourSegmentationBaseTool.d.ts +19 -0
  195. package/dist/types/tools/base/ContourSegmentationBaseTool.d.ts.map +1 -0
  196. package/dist/types/tools/displayTools/Contour/contourDisplay.d.ts.map +1 -1
  197. package/dist/types/tools/index.d.ts +4 -1
  198. package/dist/types/tools/index.d.ts.map +1 -1
  199. package/dist/types/types/ContourAnnotation.d.ts +12 -0
  200. package/dist/types/types/ContourAnnotation.d.ts.map +1 -0
  201. package/dist/types/types/ContourSegmentationAnnotation.d.ts +12 -0
  202. package/dist/types/types/ContourSegmentationAnnotation.d.ts.map +1 -0
  203. package/dist/types/types/ContourTypes.d.ts +4 -1
  204. package/dist/types/types/ContourTypes.d.ts.map +1 -1
  205. package/dist/types/types/SegmentationStateTypes.d.ts +1 -1
  206. package/dist/types/types/SegmentationStateTypes.d.ts.map +1 -1
  207. package/dist/types/types/ToolSpecificAnnotationTypes.d.ts +11 -52
  208. package/dist/types/types/ToolSpecificAnnotationTypes.d.ts.map +1 -1
  209. package/dist/types/types/index.d.ts +3 -1
  210. package/dist/types/types/index.d.ts.map +1 -1
  211. package/dist/types/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
  212. package/dist/umd/index.js +1 -1
  213. package/dist/umd/index.js.map +1 -1
  214. package/package.json +3 -3
  215. package/src/index.ts +6 -0
  216. package/src/stateManagement/segmentation/SegmentationStateManager.ts +11 -2
  217. package/src/stateManagement/segmentation/config/segmentationVisibility.ts +52 -6
  218. package/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +27 -1
  219. package/src/tools/annotation/AngleTool.ts +4 -3
  220. package/src/tools/annotation/ArrowAnnotateTool.ts +4 -3
  221. package/src/tools/annotation/BidirectionalTool.ts +4 -4
  222. package/src/tools/annotation/CircleROITool.ts +4 -3
  223. package/src/tools/annotation/CobbAngleTool.ts +4 -3
  224. package/src/tools/annotation/DragProbeTool.ts +4 -1
  225. package/src/tools/annotation/EllipticalROITool.ts +4 -3
  226. package/src/tools/annotation/KeyImageTool.ts +4 -1
  227. package/src/tools/annotation/LengthTool.ts +4 -5
  228. package/src/tools/annotation/LivewireContourSegmentationTool.ts +13 -0
  229. package/src/tools/annotation/LivewireContourTool.ts +75 -150
  230. package/src/tools/annotation/PlanarFreehandContourSegmentationTool.ts +30 -0
  231. package/src/tools/annotation/PlanarFreehandROITool.ts +153 -187
  232. package/src/tools/annotation/ProbeTool.ts +1 -1
  233. package/src/tools/annotation/RectangleROITool.ts +4 -3
  234. package/src/tools/annotation/SplineContourSegmentationTool.ts +28 -0
  235. package/src/tools/annotation/SplineROITool.ts +172 -282
  236. package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +7 -5
  237. package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +4 -4
  238. package/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +3 -1
  239. package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +12 -9
  240. package/src/tools/annotation/planarFreehandROITool/openContourEndEditLoop.ts +5 -2
  241. package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +19 -14
  242. package/src/tools/base/AnnotationTool.ts +35 -0
  243. package/src/tools/base/ContourBaseTool.ts +226 -0
  244. package/src/tools/base/ContourSegmentationBaseTool.ts +276 -0
  245. package/src/tools/displayTools/Contour/contourDisplay.ts +1 -0
  246. package/src/tools/index.ts +6 -0
  247. package/src/types/ContourAnnotation.ts +13 -0
  248. package/src/types/ContourSegmentationAnnotation.ts +14 -0
  249. package/src/types/ContourTypes.ts +8 -1
  250. package/src/types/SegmentationStateTypes.ts +1 -1
  251. package/src/types/ToolSpecificAnnotationTypes.ts +17 -53
  252. package/src/types/index.ts +12 -0
@@ -1,5 +1,4 @@
1
1
  import { vec3 } from 'gl-matrix';
2
- import { AnnotationTool } from '../base';
3
2
 
4
3
  import {
5
4
  getEnabledElement,
@@ -10,20 +9,13 @@ import {
10
9
  VolumeViewport,
11
10
  } from '@cornerstonejs/core';
12
11
  import type { Types } from '@cornerstonejs/core';
13
- import {
14
- addAnnotation,
15
- getAnnotations,
16
- removeAnnotation,
17
- } from '../../stateManagement/annotation/annotationState';
18
- import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
19
- import {
20
- drawHandles as drawHandlesSvg,
21
- drawPolyline as drawPolylineSvg,
22
- } from '../../drawingSvg';
12
+ import { removeAnnotation } from '../../stateManagement/annotation/annotationState';
13
+ import { drawHandles as drawHandlesSvg } from '../../drawingSvg';
23
14
  import { state } from '../../store';
24
15
  import { Events } from '../../enums';
25
16
  import { resetElementCursor } from '../../cursors/elementCursor';
26
17
  import {
18
+ Annotation,
27
19
  EventTypes,
28
20
  ToolHandle,
29
21
  PublicToolProps,
@@ -36,15 +28,15 @@ import {
36
28
  AnnotationCompletedEventDetail,
37
29
  AnnotationModifiedEventDetail,
38
30
  } from '../../types/EventTypes';
39
- import { StyleSpecifier } from '../../types/AnnotationStyle';
40
31
 
41
32
  import { LivewireScissors } from '../../utilities/livewire/LivewireScissors';
42
33
  import { LivewirePath } from '../../utilities/livewire/LiveWirePath';
43
34
  import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
35
+ import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
44
36
 
45
37
  const CLICK_CLOSE_CURVE_SQR_DIST = 10 ** 2; // px
46
38
 
47
- class LivewireContourTool extends AnnotationTool {
39
+ class LivewireContourTool extends ContourSegmentationBaseTool {
48
40
  public static toolName: string;
49
41
  private scissors: LivewireScissors;
50
42
 
@@ -86,9 +78,9 @@ class LivewireContourTool extends AnnotationTool {
86
78
  * @returns The annotation object.
87
79
  *
88
80
  */
89
- addNewAnnotation = (
81
+ addNewAnnotation(
90
82
  evt: EventTypes.InteractionEventType
91
- ): LivewireContourAnnotation => {
83
+ ): LivewireContourAnnotation {
92
84
  const eventDetail = evt.detail;
93
85
  const { currentPoints, element } = eventDetail;
94
86
  const { world: worldPos, canvas: canvasPos } = currentPoints;
@@ -98,17 +90,6 @@ class LivewireContourTool extends AnnotationTool {
98
90
 
99
91
  this.isDrawing = true;
100
92
 
101
- const camera = viewport.getCamera();
102
- const { viewPlaneNormal, viewUp } = camera;
103
-
104
- const referencedImageId = this.getReferencedImageId(
105
- viewport,
106
- worldPos,
107
- viewPlaneNormal,
108
- viewUp
109
- );
110
-
111
- const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
112
93
  const defaultActor = viewport.getDefaultActor();
113
94
 
114
95
  if (!defaultActor || !csUtils.isImageActor(defaultActor)) {
@@ -193,26 +174,9 @@ class LivewireContourTool extends AnnotationTool {
193
174
  confirmedPath.addPoint(startPos);
194
175
  confirmedPath.addControlPoint(startPos);
195
176
 
196
- const annotation: LivewireContourAnnotation = {
197
- highlighted: true,
198
- invalidated: true,
199
- metadata: {
200
- toolName: this.getToolName(),
201
- viewPlaneNormal: <Types.Point3>[...viewPlaneNormal],
202
- viewUp: <Types.Point3>[...viewUp],
203
- FrameOfReferenceUID,
204
- referencedImageId,
205
- },
206
- data: {
207
- polyline: [],
208
- handles: {
209
- points: [[...worldPos]],
210
- activeHandleIndex: null,
211
- },
212
- },
213
- };
177
+ const annotation = this.createAnnotation(evt) as LivewireContourAnnotation;
214
178
 
215
- addAnnotation(annotation, element);
179
+ this.addAnnotation(annotation, element);
216
180
 
217
181
  const viewportIdsToRender = getViewportIdsWithToolToRender(
218
182
  element,
@@ -237,7 +201,7 @@ class LivewireContourTool extends AnnotationTool {
237
201
  triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
238
202
 
239
203
  return annotation;
240
- };
204
+ }
241
205
 
242
206
  /**
243
207
  * It returns if the canvas point is near the provided annotation in the provided
@@ -259,7 +223,7 @@ class LivewireContourTool extends AnnotationTool {
259
223
  const enabledElement = getEnabledElement(element);
260
224
  const { viewport } = enabledElement;
261
225
  const proximitySquared = proximity * proximity;
262
- const canvasPoints = annotation.data.polyline.map((p) =>
226
+ const canvasPoints = annotation.data.contour.polyline.map((p) =>
263
227
  viewport.worldToCanvas(p)
264
228
  );
265
229
 
@@ -515,7 +479,7 @@ class LivewireContourTool extends AnnotationTool {
515
479
  const { deltaPoints } = eventDetail as EventTypes.MouseDragEventDetail;
516
480
  const worldPosDelta = deltaPoints.world;
517
481
 
518
- const points = data.polyline;
482
+ const points = data.contour.polyline;
519
483
 
520
484
  points.forEach((point) => {
521
485
  point[0] += worldPosDelta[0];
@@ -636,129 +600,90 @@ class LivewireContourTool extends AnnotationTool {
636
600
  element.removeEventListener(Events.TOUCH_TAP, this._mouseDownCallback);
637
601
  };
638
602
 
639
- /**
640
- * it is used to draw the circleROI annotation in each
641
- * request animation frame. It calculates the updated cached statistics if
642
- * data is invalidated and cache it.
643
- *
644
- * @param enabledElement - The Cornerstone's enabledElement.
645
- * @param svgDrawingHelper - The svgDrawingHelper providing the context for drawing.
646
- */
647
- renderAnnotation = (
603
+ public renderAnnotation(
648
604
  enabledElement: Types.IEnabledElement,
649
605
  svgDrawingHelper: SVGDrawingHelper
650
- ): boolean => {
651
- let renderStatus = false;
606
+ ): boolean {
652
607
  const { viewport } = enabledElement;
653
- const { worldToCanvas } = viewport;
654
608
  const { element } = viewport;
655
609
 
656
- // If rendering engine has been destroyed while rendering
657
- if (!viewport.getRenderingEngine()) {
658
- console.warn('Rendering Engine has been destroyed');
659
- return renderStatus;
660
- }
610
+ // Update the annotation that is in editData (being edited)
611
+ this._updateAnnotation(element, this.editData?.currentPath);
661
612
 
662
- let annotations = getAnnotations(this.getToolName(), element);
613
+ return super.renderAnnotation(enabledElement, svgDrawingHelper);
614
+ }
663
615
 
664
- if (!annotations?.length) {
665
- return renderStatus;
666
- }
616
+ protected isContourSegmentationTool(): boolean {
617
+ // Disable contour segmenatation behavior because it shall be activated only
618
+ // for LivewireContourSegmentationTool
619
+ return false;
620
+ }
667
621
 
668
- annotations = this.filterInteractableAnnotationsForElement(
669
- element,
670
- annotations
622
+ protected createAnnotation(evt: EventTypes.InteractionEventType): Annotation {
623
+ const contourSegmentationAnnotation = super.createAnnotation(evt);
624
+ const { world: worldPos } = evt.detail.currentPoints;
625
+
626
+ return <LivewireContourAnnotation>csUtils.deepMerge(
627
+ contourSegmentationAnnotation,
628
+ {
629
+ data: {
630
+ handles: {
631
+ points: [[...worldPos]],
632
+ },
633
+ },
634
+ }
671
635
  );
636
+ }
672
637
 
673
- if (!annotations?.length) {
674
- return renderStatus;
675
- }
676
-
638
+ /**
639
+ * Render an annotation instance
640
+ * @param renderContext - Render context that contains the annotation, enabledElement, etc.
641
+ * @returns True if the annotation is rendered or false otherwise
642
+ */
643
+ protected renderAnnotationInstance(renderContext: {
644
+ enabledElement: Types.IEnabledElement;
645
+ targetId: string;
646
+ annotation: Annotation;
647
+ annotationStyle: Record<string, any>;
648
+ svgDrawingHelper: SVGDrawingHelper;
649
+ }): boolean {
650
+ const { enabledElement, svgDrawingHelper, annotationStyle } = renderContext;
651
+ const { viewport } = enabledElement;
652
+ const { worldToCanvas } = viewport;
653
+ const annotation = renderContext.annotation as LivewireContourAnnotation;
654
+ const { annotationUID, data } = annotation;
655
+ const { handles } = data;
677
656
  const newAnnotation = this.editData?.newAnnotation;
678
- const styleSpecifier: StyleSpecifier = {
679
- toolGroupId: this.toolGroupId,
680
- toolName: this.getToolName(),
681
- viewportId: enabledElement.viewport.id,
682
- };
683
-
684
- // Update the annotation that is in editData (being edited)
685
- this._updateAnnotation(element, this.editData?.currentPath);
657
+ const { lineWidth, lineDash, color } = annotationStyle;
686
658
 
687
- for (let i = 0; i < annotations.length; i++) {
688
- const annotation = annotations[i] as LivewireContourAnnotation;
689
- const { annotationUID, data } = annotation;
690
- const { handles } = data;
691
- const { points } = handles;
692
-
693
- styleSpecifier.annotationUID = annotationUID;
694
-
695
- const lineWidth = this.getStyle(
696
- 'lineWidth',
697
- styleSpecifier,
698
- annotation
699
- ) as number;
700
- const lineDash = this.getStyle(
701
- 'lineDash',
702
- styleSpecifier,
703
- annotation
704
- ) as string;
705
- const color = this.getStyle(
706
- 'color',
707
- styleSpecifier,
708
- annotation
709
- ) as string;
710
-
711
- const canvasCoordinates = points.map((p) =>
712
- worldToCanvas(p)
713
- ) as Types.Point2[];
714
-
715
- if (!isAnnotationVisible(annotationUID)) {
716
- continue;
717
- }
718
-
719
- // Render the first control point only when the annotaion is drawn for the
720
- // first time to make it easier to know where the user needs to click to
721
- // to close the ROI.
722
- if (
723
- newAnnotation &&
724
- annotation.annotationUID === this.editData?.annotation?.annotationUID
725
- ) {
726
- const handleGroupUID = '0';
727
- drawHandlesSvg(
728
- svgDrawingHelper,
729
- annotationUID,
730
- handleGroupUID,
731
- [canvasCoordinates[0]],
732
- {
733
- color,
734
- lineDash,
735
- lineWidth,
736
- }
737
- );
738
- }
739
-
740
- const canvasPolyline = data.polyline.map((worldPoint) =>
741
- viewport.worldToCanvas(worldPoint)
742
- );
659
+ // Render the first control point only when the annotaion is drawn for the
660
+ // first time to make it easier to know where the user needs to click to
661
+ // to close the ROI.
662
+ if (
663
+ newAnnotation &&
664
+ annotation.annotationUID === this.editData?.annotation?.annotationUID
665
+ ) {
666
+ const handleGroupUID = '0';
667
+ const startPoint = worldToCanvas(handles.points[0]);
743
668
 
744
- drawPolylineSvg(
669
+ drawHandlesSvg(
745
670
  svgDrawingHelper,
746
671
  annotationUID,
747
- 'polyline',
748
- canvasPolyline,
672
+ handleGroupUID,
673
+ [startPoint],
749
674
  {
750
675
  color,
751
676
  lineDash,
752
677
  lineWidth,
753
678
  }
754
679
  );
755
-
756
- renderStatus = true;
757
- annotation.invalidated = false;
758
680
  }
759
681
 
760
- return renderStatus;
761
- };
682
+ // Let the base class render the contour
683
+ super.renderAnnotationInstance(renderContext);
684
+
685
+ return true;
686
+ }
762
687
 
763
688
  private _updateAnnotation(
764
689
  element: HTMLDivElement,
@@ -770,7 +695,7 @@ class LivewireContourTool extends AnnotationTool {
770
695
 
771
696
  const { pointArray: imagePoints } = livewirePath;
772
697
  const worldPolylinePoints: Types.Point3[] = [];
773
- const { sliceToWorld } = this.editData;
698
+ const { annotation, sliceToWorld } = this.editData;
774
699
 
775
700
  for (let i = 0, len = imagePoints.length; i < len; i++) {
776
701
  const imagePoint = imagePoints[i];
@@ -782,7 +707,7 @@ class LivewireContourTool extends AnnotationTool {
782
707
  worldPolylinePoints.push([...worldPolylinePoints[0]]);
783
708
  }
784
709
 
785
- this.editData.annotation.data.polyline = worldPolylinePoints;
710
+ annotation.data.contour.polyline = worldPolylinePoints;
786
711
  }
787
712
  }
788
713
 
@@ -0,0 +1,30 @@
1
+ import { utilities } from '@cornerstonejs/core';
2
+ import { PublicToolProps } from '../../types';
3
+ import PlanarFreehandROITool from './PlanarFreehandROITool';
4
+
5
+ class PlanarFreehandContourSegmentationTool extends PlanarFreehandROITool {
6
+ static toolName;
7
+
8
+ constructor(toolProps: PublicToolProps) {
9
+ const initialProps = utilities.deepMerge(
10
+ {
11
+ configuration: {
12
+ calculateStats: false,
13
+ },
14
+ },
15
+ toolProps
16
+ );
17
+
18
+ super(initialProps);
19
+ }
20
+
21
+ protected isContourSegmentationTool(): boolean {
22
+ // Re-enable contour segmentation behavior disabled by PlanarFreehandROITool
23
+ return true;
24
+ }
25
+ }
26
+
27
+ PlanarFreehandContourSegmentationTool.toolName =
28
+ 'PlanarFreehandContourSegmentationTool';
29
+
30
+ export default PlanarFreehandContourSegmentationTool;