@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
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const core_1 = require("@cornerstonejs/core");
7
+ const SplineROITool_1 = __importDefault(require("./SplineROITool"));
8
+ class SplineContourSegmentationTool extends SplineROITool_1.default {
9
+ constructor(toolProps) {
10
+ const initialProps = core_1.utilities.deepMerge({
11
+ configuration: {
12
+ calculateStats: false,
13
+ },
14
+ }, toolProps);
15
+ super(initialProps);
16
+ }
17
+ isContourSegmentationTool() {
18
+ return true;
19
+ }
20
+ }
21
+ SplineContourSegmentationTool.toolName = 'SplineContourSegmentationTool';
22
+ exports.default = SplineContourSegmentationTool;
23
+ //# sourceMappingURL=SplineContourSegmentationTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplineContourSegmentationTool.js","sourceRoot":"","sources":["../../../../src/tools/annotation/SplineContourSegmentationTool.ts"],"names":[],"mappings":";;;;;AAAA,8CAAgD;AAEhD,oEAA4C;AAE5C,MAAM,6BAA8B,SAAQ,uBAAa;IAGvD,YAAY,SAA0B;QACpC,MAAM,YAAY,GAAG,gBAAS,CAAC,SAAS,CACtC;YACE,aAAa,EAAE;gBACb,cAAc,EAAE,KAAK;aACtB;SACF,EACD,SAAS,CACV,CAAC;QAEF,KAAK,CAAC,YAAY,CAAC,CAAC;IACtB,CAAC;IAES,yBAAyB;QAEjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,6BAA6B,CAAC,QAAQ,GAAG,+BAA+B,CAAC;AACzE,kBAAe,6BAA6B,CAAC"}
@@ -1,7 +1,7 @@
1
- import { AnnotationTool } from '../base';
2
1
  import type { Types } from '@cornerstonejs/core';
3
- import { EventTypes, ToolHandle, PublicToolProps, ToolProps, SVGDrawingHelper } from '../../types';
2
+ import { Annotation, EventTypes, ToolHandle, PublicToolProps, ToolProps, SVGDrawingHelper } from '../../types';
4
3
  import { SplineROIAnnotation } from '../../types/ToolSpecificAnnotationTypes';
4
+ import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
5
5
  declare enum SplineTypesEnum {
6
6
  Cardinal = "CARDINAL",
7
7
  Linear = "LINEAR",
@@ -12,7 +12,7 @@ declare enum SplineToolActions {
12
12
  AddControlPoint = "addControlPoint",
13
13
  DeleteControlPoint = "deleteControlPoint"
14
14
  }
15
- declare class SplineROITool extends AnnotationTool {
15
+ declare class SplineROITool extends ContourSegmentationBaseTool {
16
16
  static toolName: any;
17
17
  static SplineTypes: typeof SplineTypesEnum;
18
18
  static Actions: typeof SplineToolActions;
@@ -31,7 +31,7 @@ declare class SplineROITool extends AnnotationTool {
31
31
  isDrawing: boolean;
32
32
  isHandleOutsideImage: boolean;
33
33
  constructor(toolProps?: PublicToolProps, defaultToolProps?: ToolProps);
34
- addNewAnnotation: (evt: EventTypes.InteractionEventType) => SplineROIAnnotation;
34
+ addNewAnnotation(evt: EventTypes.InteractionEventType): SplineROIAnnotation;
35
35
  isPointNearTool: (element: HTMLDivElement, annotation: SplineROIAnnotation, canvasCoords: Types.Point2, proximity: number) => boolean;
36
36
  toolSelectedCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation) => void;
37
37
  handleSelectedCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation, handle: ToolHandle) => void;
@@ -40,19 +40,26 @@ declare class SplineROITool extends AnnotationTool {
40
40
  private _mouseMoveCallback;
41
41
  private _mouseDownCallback;
42
42
  private _dragCallback;
43
- cancel: (element: HTMLDivElement) => string;
43
+ cancel(element: HTMLDivElement): string;
44
44
  triggerAnnotationModified: (annotation: SplineROIAnnotation, enabledElement: Types.IEnabledElement) => void;
45
45
  private _activateModify;
46
46
  private _deactivateModify;
47
47
  private _activateDraw;
48
48
  private _deactivateDraw;
49
- renderAnnotation: (enabledElement: Types.IEnabledElement, svgDrawingHelper: SVGDrawingHelper) => boolean;
50
- _renderStats: (annotation: any, viewport: any, enabledElement: any, svgDrawingHelper: any) => void;
49
+ protected isContourSegmentationTool(): boolean;
50
+ protected renderAnnotationInstance(renderContext: {
51
+ enabledElement: Types.IEnabledElement;
52
+ targetId: string;
53
+ annotation: Annotation;
54
+ annotationStyle: Record<string, any>;
55
+ svgDrawingHelper: SVGDrawingHelper;
56
+ }): boolean;
57
+ protected createAnnotation(evt: EventTypes.InteractionEventType): Annotation;
58
+ private _renderStats;
51
59
  addControlPointCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation) => void;
52
60
  private _deleteControlPointByIndex;
53
61
  deleteControlPointCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation) => void;
54
62
  private _getSplineConfig;
55
- private _updateSplineScale;
56
63
  private _updateSplineInstance;
57
64
  private _calculateCachedStats;
58
65
  }
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const base_1 = require("../base");
4
6
  const core_1 = require("@cornerstonejs/core");
7
+ const core_2 = require("@cornerstonejs/core");
5
8
  const gl_matrix_1 = require("gl-matrix");
6
9
  const annotationState_1 = require("../../stateManagement/annotation/annotationState");
7
- const annotationLocking_1 = require("../../stateManagement/annotation/annotationLocking");
8
- const annotationVisibility_1 = require("../../stateManagement/annotation/annotationVisibility");
9
10
  const drawingSvg_1 = require("../../drawingSvg");
10
11
  const store_1 = require("../../store");
11
12
  const enums_1 = require("../../enums");
@@ -17,6 +18,7 @@ const CardinalSpline_1 = require("./splines/CardinalSpline");
17
18
  const LinearSpline_1 = require("./splines/LinearSpline");
18
19
  const CatmullRomSpline_1 = require("./splines/CatmullRomSpline");
19
20
  const BSpline_1 = require("./splines/BSpline");
21
+ const ContourSegmentationBaseTool_1 = __importDefault(require("../base/ContourSegmentationBaseTool"));
20
22
  const SPLINE_MIN_POINTS = 3;
21
23
  const SPLINE_CLICK_CLOSE_CURVE_DIST = 10;
22
24
  const DEFAULT_SPLINE_CONFIG = {
@@ -39,7 +41,7 @@ var SplineToolActions;
39
41
  SplineToolActions["AddControlPoint"] = "addControlPoint";
40
42
  SplineToolActions["DeleteControlPoint"] = "deleteControlPoint";
41
43
  })(SplineToolActions || (SplineToolActions = {}));
42
- class SplineROITool extends base_1.AnnotationTool {
44
+ class SplineROITool extends ContourSegmentationBaseTool_1.default {
43
45
  constructor(toolProps = {}, defaultToolProps = {
44
46
  supportedInteractionTypes: ['Mouse', 'Touch'],
45
47
  configuration: {
@@ -93,70 +95,6 @@ class SplineROITool extends base_1.AnnotationTool {
93
95
  }) {
94
96
  super(toolProps, defaultToolProps);
95
97
  this.isHandleOutsideImage = false;
96
- this.addNewAnnotation = (evt) => {
97
- const eventDetail = evt.detail;
98
- const { currentPoints, element } = eventDetail;
99
- const { world: worldPos, canvas: canvasPos } = currentPoints;
100
- const enabledElement = (0, core_1.getEnabledElement)(element);
101
- const { viewport, renderingEngine } = enabledElement;
102
- this.isDrawing = true;
103
- const camera = viewport.getCamera();
104
- const { viewPlaneNormal, viewUp } = camera;
105
- const { type: splineType } = this.configuration.spline;
106
- const splineConfig = this._getSplineConfig(splineType);
107
- const spline = new splineConfig.Class();
108
- const referencedImageId = this.getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp);
109
- const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
110
- const annotation = {
111
- highlighted: true,
112
- invalidated: true,
113
- metadata: {
114
- toolName: this.getToolName(),
115
- viewPlaneNormal: [...viewPlaneNormal],
116
- viewUp: [...viewUp],
117
- FrameOfReferenceUID,
118
- referencedImageId,
119
- },
120
- data: {
121
- handles: {
122
- textBox: {
123
- hasMoved: false,
124
- worldPosition: [0, 0, 0],
125
- worldBoundingBox: {
126
- topLeft: [0, 0, 0],
127
- topRight: [0, 0, 0],
128
- bottomLeft: [0, 0, 0],
129
- bottomRight: [0, 0, 0],
130
- },
131
- },
132
- points: [[...worldPos]],
133
- activeHandleIndex: null,
134
- },
135
- spline: {
136
- type: splineConfig.type,
137
- instance: spline,
138
- resolution: splineConfig.resolution,
139
- closed: false,
140
- polyline: [],
141
- },
142
- cachedStats: {},
143
- },
144
- };
145
- (0, annotationState_1.addAnnotation)(annotation, element);
146
- const viewportIdsToRender = (0, viewportFilters_1.getViewportIdsWithToolToRender)(element, this.getToolName());
147
- this.editData = {
148
- annotation,
149
- viewportIdsToRender,
150
- movingTextBox: false,
151
- newAnnotation: true,
152
- hasMoved: false,
153
- lastCanvasPoint: canvasPos,
154
- };
155
- this._activateDraw(element);
156
- evt.preventDefault();
157
- (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
158
- return annotation;
159
- };
160
98
  this.isPointNearTool = (element, annotation, canvasCoords, proximity) => {
161
99
  const { instance: spline } = annotation.data.spline;
162
100
  return spline.isPointNearCurve(canvasCoords, proximity);
@@ -171,7 +109,7 @@ class SplineROITool extends base_1.AnnotationTool {
171
109
  viewportIdsToRender,
172
110
  movingTextBox: false,
173
111
  };
174
- const enabledElement = (0, core_1.getEnabledElement)(element);
112
+ const enabledElement = (0, core_2.getEnabledElement)(element);
175
113
  const { renderingEngine } = enabledElement;
176
114
  this._activateModify(element);
177
115
  (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
@@ -199,7 +137,7 @@ class SplineROITool extends base_1.AnnotationTool {
199
137
  movingTextBox,
200
138
  };
201
139
  this._activateModify(element);
202
- const enabledElement = (0, core_1.getEnabledElement)(element);
140
+ const enabledElement = (0, core_2.getEnabledElement)(element);
203
141
  const { renderingEngine } = enabledElement;
204
142
  (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
205
143
  evt.preventDefault();
@@ -213,7 +151,7 @@ class SplineROITool extends base_1.AnnotationTool {
213
151
  this._deactivateModify(element);
214
152
  this._deactivateDraw(element);
215
153
  (0, elementCursor_1.resetElementCursor)(element);
216
- const enabledElement = (0, core_1.getEnabledElement)(element);
154
+ const enabledElement = (0, core_2.getEnabledElement)(element);
217
155
  const { renderingEngine } = enabledElement;
218
156
  if (this.isHandleOutsideImage &&
219
157
  this.configuration.preventHandleOutsideImage) {
@@ -225,7 +163,7 @@ class SplineROITool extends base_1.AnnotationTool {
225
163
  const eventDetail = {
226
164
  annotation,
227
165
  };
228
- (0, core_1.triggerEvent)(core_1.eventTarget, eventType, eventDetail);
166
+ (0, core_2.triggerEvent)(core_2.eventTarget, eventType, eventDetail);
229
167
  }
230
168
  this.editData = null;
231
169
  this.isDrawing = false;
@@ -258,7 +196,7 @@ class SplineROITool extends base_1.AnnotationTool {
258
196
  return;
259
197
  }
260
198
  const { element } = evt.detail;
261
- const { renderingEngine } = (0, core_1.getEnabledElement)(element);
199
+ const { renderingEngine } = (0, core_2.getEnabledElement)(element);
262
200
  const viewportIdsToRender = (0, viewportFilters_1.getViewportIdsWithToolToRender)(element, this.getToolName());
263
201
  this.editData.lastCanvasPoint = evt.detail.currentPoints.canvas;
264
202
  (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
@@ -268,32 +206,32 @@ class SplineROITool extends base_1.AnnotationTool {
268
206
  const doubleClick = evt.type === enums_1.Events.MOUSE_DOUBLE_CLICK;
269
207
  const { annotation, viewportIdsToRender } = this.editData;
270
208
  const { data } = annotation;
271
- if (data.spline.closed) {
209
+ if (data.contour.closed) {
272
210
  return;
273
211
  }
274
212
  const eventDetail = evt.detail;
275
213
  const { element } = eventDetail;
276
214
  const { currentPoints } = eventDetail;
277
215
  const { canvas: canvasPoint, world: worldPoint } = currentPoints;
278
- const enabledElement = (0, core_1.getEnabledElement)(element);
216
+ const enabledElement = (0, core_2.getEnabledElement)(element);
279
217
  const { renderingEngine } = enabledElement;
280
- let closeSpline = data.handles.points.length >= 2 && doubleClick;
218
+ let closeContour = data.handles.points.length >= 2 && doubleClick;
281
219
  let addNewPoint = true;
282
220
  if (data.handles.points.length >= 3) {
283
221
  const { instance: spline } = data.spline;
284
222
  const closestControlPoint = spline.getClosestControlPointWithinDistance(canvasPoint, SPLINE_CLICK_CLOSE_CURVE_DIST);
285
223
  if ((closestControlPoint === null || closestControlPoint === void 0 ? void 0 : closestControlPoint.index) === 0) {
286
224
  addNewPoint = false;
287
- closeSpline = true;
225
+ closeContour = true;
288
226
  }
289
227
  }
290
228
  if (addNewPoint) {
291
229
  data.handles.points.push(worldPoint);
292
230
  }
293
- data.spline.closed = data.spline.closed || closeSpline;
231
+ data.contour.closed = data.contour.closed || closeContour;
294
232
  annotation.invalidated = true;
295
233
  (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
296
- if (data.spline.closed) {
234
+ if (data.contour.closed) {
297
235
  this._endCallback(evt);
298
236
  }
299
237
  evt.preventDefault();
@@ -332,27 +270,9 @@ class SplineROITool extends base_1.AnnotationTool {
332
270
  annotation.invalidated = true;
333
271
  }
334
272
  this.editData.hasMoved = true;
335
- const enabledElement = (0, core_1.getEnabledElement)(element);
336
- const { renderingEngine } = enabledElement;
337
- (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
338
- };
339
- this.cancel = (element) => {
340
- if (!this.isDrawing) {
341
- return;
342
- }
343
- this.isDrawing = false;
344
- this._deactivateDraw(element);
345
- this._deactivateModify(element);
346
- (0, elementCursor_1.resetElementCursor)(element);
347
- const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
348
- if (newAnnotation) {
349
- (0, annotationState_1.removeAnnotation)(annotation.annotationUID);
350
- }
351
- const enabledElement = (0, core_1.getEnabledElement)(element);
273
+ const enabledElement = (0, core_2.getEnabledElement)(element);
352
274
  const { renderingEngine } = enabledElement;
353
275
  (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
354
- this.editData = null;
355
- return annotation.annotationUID;
356
276
  };
357
277
  this.triggerAnnotationModified = (annotation, enabledElement) => {
358
278
  const { viewportId, renderingEngineId } = enabledElement;
@@ -362,7 +282,7 @@ class SplineROITool extends base_1.AnnotationTool {
362
282
  viewportId,
363
283
  renderingEngineId,
364
284
  };
365
- (0, core_1.triggerEvent)(core_1.eventTarget, eventType, eventDetail);
285
+ (0, core_2.triggerEvent)(core_2.eventTarget, eventType, eventDetail);
366
286
  };
367
287
  this._activateModify = (element) => {
368
288
  store_1.state.isInteractingWithTool = true;
@@ -398,129 +318,11 @@ class SplineROITool extends base_1.AnnotationTool {
398
318
  element.removeEventListener(enums_1.Events.MOUSE_DOUBLE_CLICK, this._mouseDownCallback);
399
319
  element.removeEventListener(enums_1.Events.TOUCH_TAP, this._mouseDownCallback);
400
320
  };
401
- this.renderAnnotation = (enabledElement, svgDrawingHelper) => {
402
- var _a, _b;
403
- let renderStatus = false;
404
- const { viewport } = enabledElement;
405
- const { worldToCanvas } = viewport;
406
- const { element } = viewport;
407
- if (!viewport.getRenderingEngine()) {
408
- console.warn('Rendering Engine has been destroyed');
409
- return renderStatus;
410
- }
411
- let annotations = (0, annotationState_1.getAnnotations)(this.getToolName(), element);
412
- if (!(annotations === null || annotations === void 0 ? void 0 : annotations.length)) {
413
- return renderStatus;
414
- }
415
- annotations = this.filterInteractableAnnotationsForElement(element, annotations);
416
- if (!(annotations === null || annotations === void 0 ? void 0 : annotations.length)) {
417
- return renderStatus;
418
- }
419
- const targetId = this.getTargetId(viewport);
420
- const newAnnotation = (_a = this.editData) === null || _a === void 0 ? void 0 : _a.newAnnotation;
421
- const styleSpecifier = {
422
- toolGroupId: this.toolGroupId,
423
- toolName: this.getToolName(),
424
- viewportId: enabledElement.viewport.id,
425
- };
426
- for (let i = 0; i < annotations.length; i++) {
427
- const annotation = annotations[i];
428
- const { annotationUID, data, highlighted } = annotation;
429
- const { handles } = data;
430
- const { points: controlPoints, activeHandleIndex } = handles;
431
- styleSpecifier.annotationUID = annotationUID;
432
- const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
433
- const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
434
- const color = this.getStyle('color', styleSpecifier, annotation);
435
- const canvasCoordinates = controlPoints.map((p) => worldToCanvas(p));
436
- const { drawPreviewEnabled } = this.configuration.spline;
437
- const splineType = annotation.data.spline.type;
438
- const splineConfig = this._getSplineConfig(splineType);
439
- const spline = this._updateSplineInstance(element, annotation);
440
- const splinePolylineCanvas = spline.getPolylinePoints();
441
- const splinePolylineWorld = [];
442
- for (let i = 0, len = splinePolylineCanvas.length; i < len; i++) {
443
- splinePolylineWorld.push(viewport.canvasToWorld(splinePolylineCanvas[i]));
444
- }
445
- data.spline.polyline = splinePolylineWorld;
446
- if (!data.cachedStats[targetId] ||
447
- data.cachedStats[targetId].areaUnit == null) {
448
- data.cachedStats[targetId] = {
449
- Modality: null,
450
- area: null,
451
- areaUnit: null,
452
- };
453
- this._calculateCachedStats(annotation, element);
454
- }
455
- else if (annotation.invalidated) {
456
- this._throttledCalculateCachedStats(annotation, element);
457
- }
458
- let activeHandleCanvasCoords;
459
- if (!(0, annotationVisibility_1.isAnnotationVisible)(annotationUID)) {
460
- continue;
461
- }
462
- if (!(0, annotationLocking_1.isAnnotationLocked)(annotation) &&
463
- !this.editData &&
464
- activeHandleIndex !== null) {
465
- activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
466
- }
467
- if (activeHandleCanvasCoords || newAnnotation || highlighted) {
468
- const handleGroupUID = '0';
469
- (0, drawingSvg_1.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
470
- color,
471
- lineDash,
472
- lineWidth,
473
- handleRadius: '3',
474
- });
475
- }
476
- if (drawPreviewEnabled &&
477
- spline.numControlPoints > 1 &&
478
- ((_b = this.editData) === null || _b === void 0 ? void 0 : _b.lastCanvasPoint) &&
479
- !spline.closed) {
480
- const { lastCanvasPoint } = this.editData;
481
- const previewPolylinePoints = spline.getPreviewPolylinePoints(lastCanvasPoint, SPLINE_CLICK_CLOSE_CURVE_DIST);
482
- (0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'previewSplineChange', previewPolylinePoints, {
483
- color: '#9EA0CA',
484
- lineDash,
485
- lineWidth,
486
- });
487
- }
488
- if (splineConfig.showControlPointsConnectors) {
489
- const controlPointsConnectors = [...canvasCoordinates];
490
- if (spline.closed) {
491
- controlPointsConnectors.push(canvasCoordinates[0]);
492
- }
493
- (0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'controlPointsConnectors', controlPointsConnectors, {
494
- color: 'rgba(255, 255, 255, 0.5)',
495
- lineDash,
496
- lineWidth,
497
- });
498
- }
499
- (0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'lineSegments', splinePolylineCanvas, {
500
- color,
501
- lineDash,
502
- lineWidth,
503
- });
504
- this._renderStats(annotation, viewport, enabledElement, svgDrawingHelper);
505
- renderStatus = true;
506
- annotation.invalidated = false;
507
- }
508
- return renderStatus;
509
- };
510
- this._renderStats = (annotation, viewport, enabledElement, svgDrawingHelper) => {
321
+ this._renderStats = (annotation, viewport, svgDrawingHelper, textboxStyle) => {
511
322
  var _a;
512
323
  const data = annotation.data;
513
324
  const targetId = this.getTargetId(viewport);
514
- if (!data.spline.closed) {
515
- return;
516
- }
517
- const styleSpecifier = {
518
- toolGroupId: this.toolGroupId,
519
- toolName: this.getToolName(),
520
- viewportId: enabledElement.viewport.id,
521
- };
522
- const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
523
- if (!options.visibility) {
325
+ if (!data.spline.closed || !textboxStyle.visibility) {
524
326
  return;
525
327
  }
526
328
  const textLines = this.configuration.getTextLines(data, targetId);
@@ -535,7 +337,7 @@ class SplineROITool extends base_1.AnnotationTool {
535
337
  }
536
338
  const textBoxPosition = viewport.worldToCanvas(data.handles.textBox.worldPosition);
537
339
  const textBoxUID = 'textBox';
538
- const boundingBox = (0, drawingSvg_1.drawLinkedTextBox)(svgDrawingHelper, (_a = annotation.annotationUID) !== null && _a !== void 0 ? _a : '', textBoxUID, textLines, textBoxPosition, canvasCoordinates, {}, options);
340
+ const boundingBox = (0, drawingSvg_1.drawLinkedTextBox)(svgDrawingHelper, (_a = annotation.annotationUID) !== null && _a !== void 0 ? _a : '', textBoxUID, textLines, textBoxPosition, canvasCoordinates, {}, textboxStyle);
539
341
  const { x: left, y: top, width, height } = boundingBox;
540
342
  data.handles.textBox.worldBoundingBox = {
541
343
  topLeft: viewport.canvasToWorld([left, top]),
@@ -554,7 +356,7 @@ class SplineROITool extends base_1.AnnotationTool {
554
356
  }
555
357
  const eventDetail = evt.detail;
556
358
  const { element } = eventDetail;
557
- const enabledElement = (0, core_1.getEnabledElement)(element);
359
+ const enabledElement = (0, core_2.getEnabledElement)(element);
558
360
  const { renderingEngine, viewport } = enabledElement;
559
361
  const { canvasToWorld } = viewport;
560
362
  const { instance: spline } = data.spline;
@@ -591,13 +393,13 @@ class SplineROITool extends base_1.AnnotationTool {
591
393
  return;
592
394
  }
593
395
  const data = annotation.data;
594
- if (!data.spline.closed) {
396
+ if (!data.contour.closed) {
595
397
  return;
596
398
  }
597
- const enabledElement = (0, core_1.getEnabledElement)(element);
399
+ const enabledElement = (0, core_2.getEnabledElement)(element);
598
400
  const { viewport, renderingEngine } = enabledElement;
599
401
  const { cachedStats } = data;
600
- const { polyline: points } = data.spline;
402
+ const { polyline: points } = data.contour;
601
403
  const targetIds = Object.keys(cachedStats);
602
404
  for (let i = 0; i < targetIds.length; i++) {
603
405
  const targetId = targetIds[i];
@@ -633,8 +435,147 @@ class SplineROITool extends base_1.AnnotationTool {
633
435
  };
634
436
  this._throttledCalculateCachedStats = (0, utilities_1.throttle)(this._calculateCachedStats, 100, { trailing: true });
635
437
  }
438
+ addNewAnnotation(evt) {
439
+ const eventDetail = evt.detail;
440
+ const { currentPoints, element } = eventDetail;
441
+ const { canvas: canvasPos } = currentPoints;
442
+ const enabledElement = (0, core_2.getEnabledElement)(element);
443
+ const { renderingEngine } = enabledElement;
444
+ const annotation = this.createAnnotation(evt);
445
+ this.isDrawing = true;
446
+ this.addAnnotation(annotation, element);
447
+ const viewportIdsToRender = (0, viewportFilters_1.getViewportIdsWithToolToRender)(element, this.getToolName());
448
+ this.editData = {
449
+ annotation,
450
+ viewportIdsToRender,
451
+ movingTextBox: false,
452
+ newAnnotation: true,
453
+ hasMoved: false,
454
+ lastCanvasPoint: canvasPos,
455
+ };
456
+ this._activateDraw(element);
457
+ evt.preventDefault();
458
+ (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
459
+ return annotation;
460
+ }
461
+ cancel(element) {
462
+ if (!this.isDrawing) {
463
+ return;
464
+ }
465
+ this.isDrawing = false;
466
+ this._deactivateDraw(element);
467
+ this._deactivateModify(element);
468
+ (0, elementCursor_1.resetElementCursor)(element);
469
+ const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
470
+ if (newAnnotation) {
471
+ (0, annotationState_1.removeAnnotation)(annotation.annotationUID);
472
+ }
473
+ super.cancelAnnotation(annotation);
474
+ const enabledElement = (0, core_2.getEnabledElement)(element);
475
+ const { renderingEngine } = enabledElement;
476
+ (0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
477
+ this.editData = null;
478
+ return annotation.annotationUID;
479
+ }
480
+ isContourSegmentationTool() {
481
+ return false;
482
+ }
483
+ renderAnnotationInstance(renderContext) {
484
+ var _a, _b;
485
+ const { enabledElement, targetId, svgDrawingHelper, annotationStyle } = renderContext;
486
+ const { viewport } = enabledElement;
487
+ const { worldToCanvas } = viewport;
488
+ const { element } = viewport;
489
+ const annotation = renderContext.annotation;
490
+ const { annotationUID, data, highlighted } = annotation;
491
+ const { handles } = data;
492
+ const { points: controlPoints, activeHandleIndex } = handles;
493
+ const newAnnotation = (_a = this.editData) === null || _a === void 0 ? void 0 : _a.newAnnotation;
494
+ const { lineWidth, lineDash, color, locked: annotationLocked, } = annotationStyle;
495
+ const canvasCoordinates = controlPoints.map((p) => worldToCanvas(p));
496
+ const { drawPreviewEnabled } = this.configuration.spline;
497
+ const splineType = annotation.data.spline.type;
498
+ const splineConfig = this._getSplineConfig(splineType);
499
+ const spline = this._updateSplineInstance(element, annotation);
500
+ const splinePolylineCanvas = spline.getPolylinePoints();
501
+ const splinePolylineWorld = [];
502
+ for (let i = 0, len = splinePolylineCanvas.length; i < len; i++) {
503
+ splinePolylineWorld.push(viewport.canvasToWorld(splinePolylineCanvas[i]));
504
+ }
505
+ data.contour.polyline = splinePolylineWorld;
506
+ super.renderAnnotationInstance(renderContext);
507
+ if (!data.cachedStats[targetId] ||
508
+ data.cachedStats[targetId].areaUnit == null) {
509
+ data.cachedStats[targetId] = {
510
+ Modality: null,
511
+ area: null,
512
+ areaUnit: null,
513
+ };
514
+ this._calculateCachedStats(annotation, element);
515
+ }
516
+ else if (annotation.invalidated) {
517
+ this._throttledCalculateCachedStats(annotation, element);
518
+ }
519
+ let activeHandleCanvasCoords;
520
+ if (!annotationLocked && !this.editData && activeHandleIndex !== null) {
521
+ activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
522
+ }
523
+ if (activeHandleCanvasCoords || newAnnotation || highlighted) {
524
+ const handleGroupUID = '0';
525
+ (0, drawingSvg_1.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
526
+ color,
527
+ lineWidth: Math.max(1, lineWidth),
528
+ handleRadius: '3',
529
+ });
530
+ }
531
+ if (drawPreviewEnabled &&
532
+ spline.numControlPoints > 1 &&
533
+ ((_b = this.editData) === null || _b === void 0 ? void 0 : _b.lastCanvasPoint) &&
534
+ !spline.closed) {
535
+ const { lastCanvasPoint } = this.editData;
536
+ const previewPolylinePoints = spline.getPreviewPolylinePoints(lastCanvasPoint, SPLINE_CLICK_CLOSE_CURVE_DIST);
537
+ (0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'previewSplineChange', previewPolylinePoints, {
538
+ color: '#9EA0CA',
539
+ lineDash,
540
+ lineWidth: 1,
541
+ });
542
+ }
543
+ if (splineConfig.showControlPointsConnectors) {
544
+ const controlPointsConnectors = [...canvasCoordinates];
545
+ if (spline.closed) {
546
+ controlPointsConnectors.push(canvasCoordinates[0]);
547
+ }
548
+ (0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'controlPointsConnectors', controlPointsConnectors, {
549
+ color: 'rgba(255, 255, 255, 0.5)',
550
+ lineWidth: 1,
551
+ });
552
+ }
553
+ this._renderStats(annotation, viewport, svgDrawingHelper, annotationStyle.textbox);
554
+ annotation.invalidated = false;
555
+ return true;
556
+ }
557
+ createAnnotation(evt) {
558
+ const contourAnnotation = super.createAnnotation(evt);
559
+ const { world: worldPos } = evt.detail.currentPoints;
560
+ const { type: splineType } = this.configuration.spline;
561
+ const splineConfig = this._getSplineConfig(splineType);
562
+ const spline = new splineConfig.Class();
563
+ return core_1.utilities.deepMerge(contourAnnotation, {
564
+ data: {
565
+ handles: {
566
+ points: [[...worldPos]],
567
+ },
568
+ spline: {
569
+ type: splineConfig.type,
570
+ instance: spline,
571
+ resolution: splineConfig.resolution,
572
+ },
573
+ cachedStats: {},
574
+ },
575
+ });
576
+ }
636
577
  _deleteControlPointByIndex(element, annotation, controlPointIndex) {
637
- const enabledElement = (0, core_1.getEnabledElement)(element);
578
+ const enabledElement = (0, core_2.getEnabledElement)(element);
638
579
  const { points: controlPoints } = annotation.data.handles;
639
580
  if (controlPoints.length === 3) {
640
581
  (0, annotationState_1.removeAnnotation)(annotation.annotationUID);
@@ -652,21 +593,8 @@ class SplineROITool extends base_1.AnnotationTool {
652
593
  const splineConfigs = config.spline.configuration;
653
594
  return Object.assign({ type }, DEFAULT_SPLINE_CONFIG, splineConfigs[type]);
654
595
  }
655
- _updateSplineScale(spline, annotation) {
656
- const splineType = annotation.data.spline.type;
657
- const splineConfig = this._getSplineConfig(splineType);
658
- if (!(spline instanceof CardinalSpline_1.CardinalSpline) ||
659
- spline.fixedScale ||
660
- splineConfig.scale === undefined ||
661
- spline.scale === splineConfig.scale) {
662
- return;
663
- }
664
- spline.scale = splineConfig.scale;
665
- annotation.invalidated = true;
666
- }
667
596
  _updateSplineInstance(element, annotation) {
668
- var _a;
669
- const enabledElement = (0, core_1.getEnabledElement)(element);
597
+ const enabledElement = (0, core_2.getEnabledElement)(element);
670
598
  const { viewport } = enabledElement;
671
599
  const { worldToCanvas } = viewport;
672
600
  const { data } = annotation;
@@ -675,7 +603,7 @@ class SplineROITool extends base_1.AnnotationTool {
675
603
  const worldPoints = data.handles.points;
676
604
  const canvasPoints = worldPoints.map(worldToCanvas);
677
605
  spline.setControlPoints(canvasPoints);
678
- spline.closed = !!((_a = data.spline) === null || _a === void 0 ? void 0 : _a.closed);
606
+ spline.closed = !!data.contour.closed;
679
607
  if (spline.resolution !== splineConfig.resolution) {
680
608
  spline.resolution = parseInt(splineConfig.resolution);
681
609
  annotation.invalidated = true;