@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
@@ -15,11 +15,6 @@ import {
15
15
  } from '../../utilities/getCalibratedUnits';
16
16
  import { roundNumber } from '../../utilities';
17
17
  import { Events } from '../../enums';
18
- import { AnnotationTool } from '../base';
19
- import {
20
- addAnnotation,
21
- getAnnotations,
22
- } from '../../stateManagement/annotation/annotationState';
23
18
  import { polyline } from '../../utilities/math';
24
19
  import { filterAnnotationsForDisplay } from '../../utilities/planar';
25
20
  import throttle from '../../utilities/throttle';
@@ -53,11 +48,9 @@ import { PlanarFreehandROICommonData } from '../../utilities/math/polyline/plana
53
48
  import { getIntersectionCoordinatesWithPolyline } from '../../utilities/math/polyline/getIntersectionWithPolyline';
54
49
  import pointInShapeCallback from '../../utilities/pointInShapeCallback';
55
50
  import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
56
- import {
57
- ModalityUnitOptions,
58
- getModalityUnit,
59
- } from '../../utilities/getModalityUnit';
51
+ import { getModalityUnit } from '../../utilities/getModalityUnit';
60
52
  import { BasicStatsCalculator } from '../../utilities/math/basic';
53
+ import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
61
54
 
62
55
  const { pointCanProjectOnLine } = polyline;
63
56
  const { EPSILON } = CONSTANTS;
@@ -121,10 +114,11 @@ const PARALLEL_THRESHOLD = 1 - EPSILON;
121
114
  * });
122
115
  * ```
123
116
  *
117
+ *
124
118
  * Read more in the Docs section of the website.
125
119
  */
126
120
 
127
- class PlanarFreehandROITool extends AnnotationTool {
121
+ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
128
122
  static toolName;
129
123
 
130
124
  public touchDragCallback: any;
@@ -249,63 +243,23 @@ class PlanarFreehandROITool extends AnnotationTool {
249
243
  evt: EventTypes.InteractionEventType
250
244
  ): PlanarFreehandROIAnnotation => {
251
245
  const eventDetail = evt.detail;
252
- const { currentPoints, element } = eventDetail;
253
- const worldPos = currentPoints.world;
246
+ const { element } = eventDetail;
254
247
  const enabledElement = getEnabledElement(element);
255
- const { viewport, renderingEngine } = enabledElement;
256
- const camera = viewport.getCamera();
257
- const { viewPlaneNormal, viewUp } = camera;
248
+ const { renderingEngine } = enabledElement;
249
+
250
+ const annotation = this.createAnnotation(
251
+ evt
252
+ ) as PlanarFreehandROIAnnotation;
253
+
254
+ this.addAnnotation(annotation, element);
258
255
 
259
- const referencedImageId = this.getReferencedImageId(
260
- viewport,
261
- worldPos,
262
- viewPlaneNormal,
263
- viewUp
264
- );
265
256
  const viewportIdsToRender = getViewportIdsWithToolToRender(
266
257
  element,
267
258
  this.getToolName()
268
259
  );
269
260
 
270
- const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
271
-
272
- const annotation: PlanarFreehandROIAnnotation = {
273
- highlighted: true,
274
- invalidated: true,
275
- metadata: {
276
- viewPlaneNormal: <Types.Point3>[...viewPlaneNormal],
277
- viewUp: <Types.Point3>[...viewUp],
278
- FrameOfReferenceUID,
279
- referencedImageId,
280
- toolName: this.getToolName(),
281
- },
282
- data: {
283
- handles: {
284
- points: [], // Handle points for open contours
285
- activeHandleIndex: null,
286
- textBox: {
287
- hasMoved: false,
288
- worldPosition: <Types.Point3>[0, 0, 0],
289
- worldBoundingBox: {
290
- topLeft: <Types.Point3>[0, 0, 0],
291
- topRight: <Types.Point3>[0, 0, 0],
292
- bottomLeft: <Types.Point3>[0, 0, 0],
293
- bottomRight: <Types.Point3>[0, 0, 0],
294
- },
295
- },
296
- },
297
- polyline: [<Types.Point3>[...worldPos]], // Polyline coordinates
298
- label: '',
299
- cachedStats: {},
300
- },
301
- };
302
-
303
- addAnnotation(annotation, element);
304
-
305
261
  this.activateDraw(evt, annotation, viewportIdsToRender);
306
-
307
262
  evt.preventDefault();
308
-
309
263
  triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
310
264
 
311
265
  return annotation;
@@ -356,10 +310,10 @@ class PlanarFreehandROITool extends AnnotationTool {
356
310
  this.getToolName()
357
311
  );
358
312
 
359
- if (annotation.data.isOpenContour) {
360
- this.activateOpenContourEdit(evt, annotation, viewportIdsToRender);
361
- } else {
313
+ if (annotation.data.contour.closed) {
362
314
  this.activateClosedContourEdit(evt, annotation, viewportIdsToRender);
315
+ } else {
316
+ this.activateOpenContourEdit(evt, annotation, viewportIdsToRender);
363
317
  }
364
318
  };
365
319
 
@@ -383,7 +337,7 @@ class PlanarFreehandROITool extends AnnotationTool {
383
337
  const enabledElement = getEnabledElement(element);
384
338
  const { viewport } = enabledElement;
385
339
 
386
- const points = annotation.data.polyline;
340
+ const points = annotation.data.contour.polyline;
387
341
 
388
342
  // NOTE: It is implemented this way so that we do not double calculate
389
343
  // points when number crunching adjacent line segments.
@@ -392,17 +346,16 @@ class PlanarFreehandROITool extends AnnotationTool {
392
346
  for (let i = 1; i < points.length; i++) {
393
347
  const p1 = previousPoint;
394
348
  const p2 = viewport.worldToCanvas(points[i]);
349
+ const canProject = pointCanProjectOnLine(canvasCoords, p1, p2, proximity);
395
350
 
396
- const distance = pointCanProjectOnLine(canvasCoords, p1, p2, proximity);
397
-
398
- if (distance === true) {
351
+ if (canProject) {
399
352
  return true;
400
353
  }
401
354
 
402
355
  previousPoint = p2;
403
356
  }
404
357
 
405
- if (annotation.data.isOpenContour) {
358
+ if (!annotation.data.contour.closed) {
406
359
  // Contour is open, don't check last point to first point.
407
360
  return false;
408
361
  }
@@ -411,18 +364,7 @@ class PlanarFreehandROITool extends AnnotationTool {
411
364
  const pStart = viewport.worldToCanvas(points[0]);
412
365
  const pEnd = viewport.worldToCanvas(points[points.length - 1]);
413
366
 
414
- const distance = pointCanProjectOnLine(
415
- canvasCoords,
416
- pStart,
417
- pEnd,
418
- proximity
419
- );
420
-
421
- if (distance === true) {
422
- return true;
423
- }
424
-
425
- return false;
367
+ return pointCanProjectOnLine(canvasCoords, pStart, pEnd, proximity);
426
368
  };
427
369
 
428
370
  cancel = (element: HTMLDivElement): void => {
@@ -534,7 +476,7 @@ class PlanarFreehandROITool extends AnnotationTool {
534
476
 
535
477
  return annotationViewPlaneNormal && isParallel;
536
478
  }
537
- );
479
+ ) as PlanarFreehandROIAnnotation[];
538
480
 
539
481
  // No in plane annotations.
540
482
  if (!annotationsWithParallelNormals.length) {
@@ -551,7 +493,7 @@ class PlanarFreehandROITool extends AnnotationTool {
551
493
 
552
494
  for (const annotation of annotationsWithParallelNormals) {
553
495
  const data = annotation.data;
554
- const point = data.polyline[0];
496
+ const point = data.contour.polyline[0];
555
497
 
556
498
  if (!annotation.isVisible) {
557
499
  continue;
@@ -578,39 +520,46 @@ class PlanarFreehandROITool extends AnnotationTool {
578
520
  return annotationsWithinSlice;
579
521
  }
580
522
 
581
- /**
582
- * Draws the `PlanarFreehandROIAnnotation`s at each request animation frame.
583
- *
584
- * @param enabledElement - The Cornerstone's enabledElement.
585
- * @param svgDrawingHelper - The svgDrawingHelper providing the context for drawing.
586
- */
587
- renderAnnotation = (
588
- enabledElement: Types.IEnabledElement,
589
- svgDrawingHelper: SVGDrawingHelper
590
- ): boolean => {
591
- let renderStatus = false;
592
- const { viewport, renderingEngine } = enabledElement;
593
- const { element } = viewport;
523
+ protected isContourSegmentationTool(): boolean {
524
+ // Disable contour segmenatation behavior because it shall be activated only
525
+ // for PlanarFreehandContourSegmentationTool
526
+ return false;
527
+ }
594
528
 
595
- const targetId = this.getTargetId(viewport);
529
+ protected createAnnotation(evt: EventTypes.InteractionEventType): Annotation {
530
+ const worldPos = evt.detail.currentPoints.world;
531
+ const contourAnnotation = super.createAnnotation(evt);
596
532
 
597
- let annotations = <PlanarFreehandROIAnnotation[]>(
598
- getAnnotations(this.getToolName(), element)
599
- );
533
+ return <PlanarFreehandROIAnnotation>csUtils.deepMerge(contourAnnotation, {
534
+ data: {
535
+ contour: {
536
+ polyline: [<Types.Point3>[...worldPos]],
537
+ },
538
+ label: '',
539
+ cachedStats: {},
540
+ },
541
+ });
542
+ }
600
543
 
601
- // Todo: We don't need this anymore, filtering happens in triggerAnnotationRender
602
- if (!annotations?.length) {
603
- return renderStatus;
604
- }
544
+ protected getAnnotationStyle(context) {
545
+ // This method exists only because `super` cannot be called from
546
+ // _getRenderingOptions() which is in an external file.
547
+ return super.getAnnotationStyle(context);
548
+ }
605
549
 
606
- annotations = this.filterInteractableAnnotationsForElement(
607
- element,
608
- annotations
609
- ) as PlanarFreehandROIAnnotation[];
550
+ protected renderAnnotationInstance(renderContext: {
551
+ enabledElement: Types.IEnabledElement;
552
+ targetId: string;
553
+ annotation: Annotation;
554
+ annotationStyle: Record<string, any>;
555
+ svgDrawingHelper: SVGDrawingHelper;
556
+ }): boolean {
557
+ const { enabledElement, targetId, svgDrawingHelper, annotationStyle } =
558
+ renderContext;
559
+ const annotation = renderContext.annotation as PlanarFreehandROIAnnotation;
610
560
 
611
- if (!annotations?.length) {
612
- return renderStatus;
613
- }
561
+ let renderStatus = false;
562
+ const { viewport, renderingEngine } = enabledElement;
614
563
 
615
564
  const isDrawing = this.isDrawing;
616
565
  const isEditingOpen = this.isEditingOpen;
@@ -619,44 +568,40 @@ class PlanarFreehandROITool extends AnnotationTool {
619
568
  if (!(isDrawing || isEditingOpen || isEditingClosed)) {
620
569
  // No annotations are currently being modified, so we can just use the
621
570
  // render contour method to render all of them
622
- annotations.forEach((annotation) => {
623
- this.renderContour(enabledElement, svgDrawingHelper, annotation);
624
- });
571
+ this.renderContour(enabledElement, svgDrawingHelper, annotation);
625
572
  } else {
626
- // One of the annotations will need special rendering treatment, render all
573
+ // The active annotation will need special rendering treatment. Render all
627
574
  // other annotations not being interacted with using the standard renderContour
628
575
  // rendering path.
629
576
  const activeAnnotationUID = this.commonData.annotation.annotationUID;
630
577
 
631
- annotations.forEach((annotation) => {
632
- if (annotation.annotationUID === activeAnnotationUID) {
633
- if (isDrawing) {
634
- this.renderContourBeingDrawn(
635
- enabledElement,
636
- svgDrawingHelper,
637
- annotation
638
- );
639
- } else if (isEditingClosed) {
640
- this.renderClosedContourBeingEdited(
641
- enabledElement,
642
- svgDrawingHelper,
643
- annotation
644
- );
645
- } else if (isEditingOpen) {
646
- this.renderOpenContourBeingEdited(
647
- enabledElement,
648
- svgDrawingHelper,
649
- annotation
650
- );
651
- } else {
652
- throw new Error(
653
- `Unknown ${this.getToolName()} annotation rendering state`
654
- );
655
- }
578
+ if (annotation.annotationUID === activeAnnotationUID) {
579
+ if (isDrawing) {
580
+ this.renderContourBeingDrawn(
581
+ enabledElement,
582
+ svgDrawingHelper,
583
+ annotation
584
+ );
585
+ } else if (isEditingClosed) {
586
+ this.renderClosedContourBeingEdited(
587
+ enabledElement,
588
+ svgDrawingHelper,
589
+ annotation
590
+ );
591
+ } else if (isEditingOpen) {
592
+ this.renderOpenContourBeingEdited(
593
+ enabledElement,
594
+ svgDrawingHelper,
595
+ annotation
596
+ );
656
597
  } else {
657
- this.renderContour(enabledElement, svgDrawingHelper, annotation);
598
+ throw new Error(
599
+ `Unknown ${this.getToolName()} annotation rendering state`
600
+ );
658
601
  }
659
- });
602
+ } else {
603
+ this.renderContour(enabledElement, svgDrawingHelper, annotation);
604
+ }
660
605
 
661
606
  // Todo: return boolean flag for each rendering route in the planar tool.
662
607
  renderStatus = true;
@@ -666,60 +611,76 @@ class PlanarFreehandROITool extends AnnotationTool {
666
611
  return;
667
612
  }
668
613
 
669
- annotations.forEach((annotation) => {
670
- const activeAnnotationUID = this.commonData?.annotation.annotationUID;
671
- if (
672
- annotation.annotationUID === activeAnnotationUID &&
673
- !this.commonData?.movingTextBox
674
- ) {
675
- return;
676
- }
677
-
678
- if (!this.commonData?.movingTextBox) {
679
- const { data } = annotation;
680
- if (
681
- !data.cachedStats[targetId] ||
682
- data.cachedStats[targetId].areaUnit == null
683
- ) {
684
- data.cachedStats[targetId] = {
685
- Modality: null,
686
- area: null,
687
- max: null,
688
- mean: null,
689
- stdDev: null,
690
- areaUnit: null,
691
- };
692
-
693
- this._calculateCachedStats(
694
- annotation,
695
- viewport,
696
- renderingEngine,
697
- enabledElement
698
- );
699
- } else if (annotation.invalidated) {
700
- this._throttledCalculateCachedStats(
701
- annotation,
702
- viewport,
703
- renderingEngine,
704
- enabledElement
705
- );
706
- }
707
- }
614
+ this._calculateStatsIfActive(
615
+ annotation,
616
+ targetId,
617
+ viewport,
618
+ renderingEngine,
619
+ enabledElement
620
+ );
708
621
 
709
- this._renderStats(annotation, viewport, enabledElement, svgDrawingHelper);
710
- });
622
+ this._renderStats(annotation, viewport, enabledElement, svgDrawingHelper);
711
623
 
712
624
  return renderStatus;
713
- };
625
+ }
626
+
627
+ _calculateStatsIfActive(
628
+ annotation: PlanarFreehandROIAnnotation,
629
+ targetId: string,
630
+ viewport,
631
+ renderingEngine,
632
+ enabledElement
633
+ ) {
634
+ const activeAnnotationUID = this.commonData?.annotation.annotationUID;
635
+
636
+ if (
637
+ annotation.annotationUID === activeAnnotationUID &&
638
+ !this.commonData?.movingTextBox
639
+ ) {
640
+ return;
641
+ }
714
642
 
715
- _calculateCachedStats = (
643
+ if (!this.commonData?.movingTextBox) {
644
+ const { data } = annotation;
645
+ if (
646
+ !data.cachedStats[targetId] ||
647
+ data.cachedStats[targetId].areaUnit == null
648
+ ) {
649
+ data.cachedStats[targetId] = {
650
+ Modality: null,
651
+ area: null,
652
+ max: null,
653
+ mean: null,
654
+ stdDev: null,
655
+ areaUnit: null,
656
+ };
657
+
658
+ this._calculateCachedStats(
659
+ annotation,
660
+ viewport,
661
+ renderingEngine,
662
+ enabledElement
663
+ );
664
+ } else if (annotation.invalidated) {
665
+ this._throttledCalculateCachedStats(
666
+ annotation,
667
+ viewport,
668
+ renderingEngine,
669
+ enabledElement
670
+ );
671
+ }
672
+ }
673
+ }
674
+
675
+ private _calculateCachedStats = (
716
676
  annotation,
717
677
  viewport,
718
678
  renderingEngine,
719
679
  enabledElement
720
680
  ) => {
721
- const data = annotation.data;
722
- const { cachedStats, polyline: points } = data;
681
+ const { data } = annotation;
682
+ const { cachedStats } = data;
683
+ const { polyline: points } = data.contour;
723
684
 
724
685
  const targetIds = Object.keys(cachedStats);
725
686
 
@@ -890,8 +851,13 @@ class PlanarFreehandROITool extends AnnotationTool {
890
851
  return cachedStats;
891
852
  };
892
853
 
893
- _renderStats = (annotation, viewport, enabledElement, svgDrawingHelper) => {
894
- const data = annotation.data;
854
+ private _renderStats = (
855
+ annotation,
856
+ viewport,
857
+ enabledElement,
858
+ svgDrawingHelper
859
+ ) => {
860
+ const { data } = <PlanarFreehandROIAnnotation>annotation;
895
861
  const targetId = this.getTargetId(viewport);
896
862
 
897
863
  const styleSpecifier: AnnotationStyle.StyleSpecifier = {
@@ -910,7 +876,7 @@ class PlanarFreehandROITool extends AnnotationTool {
910
876
  return;
911
877
  }
912
878
 
913
- const canvasCoordinates = data.polyline.map((p) =>
879
+ const canvasCoordinates = data.contour.polyline.map((p) =>
914
880
  viewport.worldToCanvas(p)
915
881
  );
916
882
  if (!data.handles.textBox.hasMoved) {
@@ -441,7 +441,7 @@ class ProbeTool extends AnnotationTool {
441
441
 
442
442
  styleSpecifier.annotationUID = annotationUID;
443
443
 
444
- const color = this.getStyle('color', styleSpecifier, annotation);
444
+ const { color } = this.getAnnotationStyle({ annotation, styleSpecifier });
445
445
 
446
446
  if (
447
447
  !data.cachedStats[targetId] ||
@@ -652,9 +652,10 @@ class RectangleROITool extends AnnotationTool {
652
652
 
653
653
  styleSpecifier.annotationUID = annotationUID;
654
654
 
655
- const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
656
- const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
657
- const color = this.getStyle('color', styleSpecifier, annotation);
655
+ const { color, lineWidth, lineDash } = this.getAnnotationStyle({
656
+ annotation,
657
+ styleSpecifier,
658
+ });
658
659
 
659
660
  const { viewPlaneNormal, viewUp } = viewport.getCamera();
660
661
 
@@ -0,0 +1,28 @@
1
+ import { utilities } from '@cornerstonejs/core';
2
+ import { PublicToolProps } from '../../types';
3
+ import SplineROITool from './SplineROITool';
4
+
5
+ class SplineContourSegmentationTool extends SplineROITool {
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 SplineROITool
23
+ return true;
24
+ }
25
+ }
26
+
27
+ SplineContourSegmentationTool.toolName = 'SplineContourSegmentationTool';
28
+ export default SplineContourSegmentationTool;