@cornerstonejs/tools 1.52.0 → 1.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/dist/cjs/drawingSvg/drawPath.d.ts +11 -0
  2. package/dist/cjs/drawingSvg/drawPath.js +55 -0
  3. package/dist/cjs/drawingSvg/drawPath.js.map +1 -0
  4. package/dist/cjs/drawingSvg/drawPolyline.d.ts +1 -1
  5. package/dist/cjs/drawingSvg/drawPolyline.js +2 -10
  6. package/dist/cjs/drawingSvg/drawPolyline.js.map +1 -1
  7. package/dist/cjs/drawingSvg/index.d.ts +2 -1
  8. package/dist/cjs/drawingSvg/index.js +3 -1
  9. package/dist/cjs/drawingSvg/index.js.map +1 -1
  10. package/dist/cjs/eventDispatchers/shared/getActiveToolForMouseEvent.js.map +1 -1
  11. package/dist/cjs/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts +1 -1
  12. package/dist/cjs/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +165 -78
  13. package/dist/cjs/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js.map +1 -1
  14. package/dist/cjs/stateManagement/annotation/annotationState.d.ts +6 -1
  15. package/dist/cjs/stateManagement/annotation/annotationState.js +49 -1
  16. package/dist/cjs/stateManagement/annotation/annotationState.js.map +1 -1
  17. package/dist/cjs/stateManagement/annotation/helpers/state.d.ts +2 -1
  18. package/dist/cjs/stateManagement/annotation/helpers/state.js +14 -3
  19. package/dist/cjs/stateManagement/annotation/helpers/state.js.map +1 -1
  20. package/dist/cjs/stateManagement/index.d.ts +6 -1
  21. package/dist/cjs/stateManagement/index.js +6 -1
  22. package/dist/cjs/stateManagement/index.js.map +1 -1
  23. package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +3 -1
  24. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +3 -2
  25. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  26. package/dist/cjs/tools/SegmentationIntersectionTool.js +1 -1
  27. package/dist/cjs/tools/SegmentationIntersectionTool.js.map +1 -1
  28. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js +1 -1
  29. package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js.map +1 -1
  30. package/dist/cjs/tools/annotation/LivewireContourTool.d.ts +4 -3
  31. package/dist/cjs/tools/annotation/LivewireContourTool.js +26 -26
  32. package/dist/cjs/tools/annotation/LivewireContourTool.js.map +1 -1
  33. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +1 -0
  34. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  35. package/dist/cjs/tools/annotation/SplineROITool.d.ts +6 -3
  36. package/dist/cjs/tools/annotation/SplineROITool.js +37 -18
  37. package/dist/cjs/tools/annotation/SplineROITool.js.map +1 -1
  38. package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +12 -7
  39. package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
  40. package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js +24 -18
  41. package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
  42. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js +16 -10
  43. package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
  44. package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js +19 -7
  45. package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
  46. package/dist/cjs/tools/annotation/splines/LinearSpline.js +1 -1
  47. package/dist/cjs/tools/annotation/splines/LinearSpline.js.map +1 -1
  48. package/dist/cjs/tools/annotation/splines/Spline.d.ts +2 -0
  49. package/dist/cjs/tools/annotation/splines/Spline.js +7 -3
  50. package/dist/cjs/tools/annotation/splines/Spline.js.map +1 -1
  51. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  52. package/dist/cjs/tools/base/ContourBaseTool.d.ts +1 -0
  53. package/dist/cjs/tools/base/ContourBaseTool.js +18 -1
  54. package/dist/cjs/tools/base/ContourBaseTool.js.map +1 -1
  55. package/dist/cjs/tools/base/ContourSegmentationBaseTool.js +4 -0
  56. package/dist/cjs/tools/base/ContourSegmentationBaseTool.js.map +1 -1
  57. package/dist/cjs/tools/displayTools/Contour/contourConfig.js +1 -0
  58. package/dist/cjs/tools/displayTools/Contour/contourConfig.js.map +1 -1
  59. package/dist/cjs/types/AnnotationTypes.d.ts +2 -0
  60. package/dist/cjs/types/ContourAnnotation.d.ts +6 -0
  61. package/dist/cjs/types/ContourAnnotation.js +7 -0
  62. package/dist/cjs/types/ContourAnnotation.js.map +1 -1
  63. package/dist/cjs/types/ContourTypes.d.ts +1 -0
  64. package/dist/cjs/types/EventTypes.d.ts +4 -1
  65. package/dist/cjs/types/ISpline.d.ts +1 -0
  66. package/dist/cjs/types/SplineProps.d.ts +1 -0
  67. package/dist/cjs/utilities/contours/getContourHolesDataCanvas.d.ts +3 -0
  68. package/dist/cjs/utilities/contours/getContourHolesDataCanvas.js +21 -0
  69. package/dist/cjs/utilities/contours/getContourHolesDataCanvas.js.map +1 -0
  70. package/dist/cjs/utilities/contours/getContourHolesDataWorld.d.ts +3 -0
  71. package/dist/cjs/utilities/contours/getContourHolesDataWorld.js +10 -0
  72. package/dist/cjs/utilities/contours/getContourHolesDataWorld.js.map +1 -0
  73. package/dist/cjs/utilities/contours/index.d.ts +4 -1
  74. package/dist/cjs/utilities/contours/index.js +7 -1
  75. package/dist/cjs/utilities/contours/index.js.map +1 -1
  76. package/dist/cjs/utilities/contours/updateContourPolyline.d.ts +10 -0
  77. package/dist/cjs/utilities/contours/updateContourPolyline.js +64 -0
  78. package/dist/cjs/utilities/contours/updateContourPolyline.js.map +1 -0
  79. package/dist/cjs/utilities/math/polyline/containsPoints.d.ts +2 -0
  80. package/dist/cjs/utilities/math/polyline/containsPoints.js +16 -0
  81. package/dist/cjs/utilities/math/polyline/containsPoints.js.map +1 -0
  82. package/dist/cjs/utilities/math/polyline/getWindingDirection.d.ts +2 -0
  83. package/dist/cjs/utilities/math/polyline/getWindingDirection.js +12 -0
  84. package/dist/cjs/utilities/math/polyline/getWindingDirection.js.map +1 -0
  85. package/dist/cjs/utilities/math/polyline/index.d.ts +3 -1
  86. package/dist/cjs/utilities/math/polyline/index.js +5 -1
  87. package/dist/cjs/utilities/math/polyline/index.js.map +1 -1
  88. package/dist/cjs/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts +1 -0
  89. package/dist/esm/drawingSvg/drawPath.js +49 -0
  90. package/dist/esm/drawingSvg/drawPath.js.map +1 -0
  91. package/dist/esm/drawingSvg/drawPolyline.js +2 -10
  92. package/dist/esm/drawingSvg/drawPolyline.js.map +1 -1
  93. package/dist/esm/drawingSvg/index.js +2 -1
  94. package/dist/esm/drawingSvg/index.js.map +1 -1
  95. package/dist/esm/eventDispatchers/shared/getActiveToolForMouseEvent.js.map +1 -1
  96. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +106 -32
  97. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js.map +1 -1
  98. package/dist/esm/stateManagement/annotation/annotationState.js +42 -1
  99. package/dist/esm/stateManagement/annotation/annotationState.js.map +1 -1
  100. package/dist/esm/stateManagement/annotation/helpers/state.js +12 -2
  101. package/dist/esm/stateManagement/annotation/helpers/state.js.map +1 -1
  102. package/dist/esm/stateManagement/index.js +2 -2
  103. package/dist/esm/stateManagement/index.js.map +1 -1
  104. package/dist/esm/store/ToolGroupManager/ToolGroup.js +3 -2
  105. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  106. package/dist/esm/tools/SegmentationIntersectionTool.js +1 -1
  107. package/dist/esm/tools/SegmentationIntersectionTool.js.map +1 -1
  108. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +1 -1
  109. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js.map +1 -1
  110. package/dist/esm/tools/annotation/LivewireContourTool.js +28 -28
  111. package/dist/esm/tools/annotation/LivewireContourTool.js.map +1 -1
  112. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +2 -1
  113. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  114. package/dist/esm/tools/annotation/SplineROITool.js +37 -19
  115. package/dist/esm/tools/annotation/SplineROITool.js.map +1 -1
  116. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +12 -7
  117. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
  118. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js +25 -19
  119. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
  120. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js +16 -10
  121. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
  122. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js +20 -8
  123. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
  124. package/dist/esm/tools/annotation/splines/LinearSpline.js +1 -1
  125. package/dist/esm/tools/annotation/splines/LinearSpline.js.map +1 -1
  126. package/dist/esm/tools/annotation/splines/Spline.js +5 -1
  127. package/dist/esm/tools/annotation/splines/Spline.js.map +1 -1
  128. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  129. package/dist/esm/tools/base/ContourBaseTool.js +20 -3
  130. package/dist/esm/tools/base/ContourBaseTool.js.map +1 -1
  131. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +4 -0
  132. package/dist/esm/tools/base/ContourSegmentationBaseTool.js.map +1 -1
  133. package/dist/esm/tools/displayTools/Contour/contourConfig.js +1 -0
  134. package/dist/esm/tools/displayTools/Contour/contourConfig.js.map +1 -1
  135. package/dist/esm/types/ContourAnnotation.js +6 -1
  136. package/dist/esm/types/ContourAnnotation.js.map +1 -1
  137. package/dist/esm/utilities/contours/getContourHolesDataCanvas.js +15 -0
  138. package/dist/esm/utilities/contours/getContourHolesDataCanvas.js.map +1 -0
  139. package/dist/esm/utilities/contours/getContourHolesDataWorld.js +6 -0
  140. package/dist/esm/utilities/contours/getContourHolesDataWorld.js.map +1 -0
  141. package/dist/esm/utilities/contours/index.js +4 -1
  142. package/dist/esm/utilities/contours/index.js.map +1 -1
  143. package/dist/esm/utilities/contours/updateContourPolyline.js +38 -0
  144. package/dist/esm/utilities/contours/updateContourPolyline.js.map +1 -0
  145. package/dist/esm/utilities/math/polyline/containsPoints.js +10 -0
  146. package/dist/esm/utilities/math/polyline/containsPoints.js.map +1 -0
  147. package/dist/esm/utilities/math/polyline/getWindingDirection.js +6 -0
  148. package/dist/esm/utilities/math/polyline/getWindingDirection.js.map +1 -0
  149. package/dist/esm/utilities/math/polyline/index.js +3 -1
  150. package/dist/esm/utilities/math/polyline/index.js.map +1 -1
  151. package/dist/types/drawingSvg/drawPath.d.ts +12 -0
  152. package/dist/types/drawingSvg/drawPath.d.ts.map +1 -0
  153. package/dist/types/drawingSvg/drawPolyline.d.ts +1 -1
  154. package/dist/types/drawingSvg/drawPolyline.d.ts.map +1 -1
  155. package/dist/types/drawingSvg/index.d.ts +2 -1
  156. package/dist/types/drawingSvg/index.d.ts.map +1 -1
  157. package/dist/types/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts +1 -1
  158. package/dist/types/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts.map +1 -1
  159. package/dist/types/stateManagement/annotation/annotationState.d.ts +6 -1
  160. package/dist/types/stateManagement/annotation/annotationState.d.ts.map +1 -1
  161. package/dist/types/stateManagement/annotation/helpers/state.d.ts +2 -1
  162. package/dist/types/stateManagement/annotation/helpers/state.d.ts.map +1 -1
  163. package/dist/types/stateManagement/index.d.ts +6 -1
  164. package/dist/types/store/ToolGroupManager/ToolGroup.d.ts +3 -1
  165. package/dist/types/store/ToolGroupManager/ToolGroup.d.ts.map +1 -1
  166. package/dist/types/tools/annotation/LivewireContourTool.d.ts +4 -3
  167. package/dist/types/tools/annotation/LivewireContourTool.d.ts.map +1 -1
  168. package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts.map +1 -1
  169. package/dist/types/tools/annotation/SplineROITool.d.ts +6 -3
  170. package/dist/types/tools/annotation/SplineROITool.d.ts.map +1 -1
  171. package/dist/types/tools/annotation/planarFreehandROITool/closedContourEditLoop.d.ts.map +1 -1
  172. package/dist/types/tools/annotation/planarFreehandROITool/drawLoop.d.ts.map +1 -1
  173. package/dist/types/tools/annotation/planarFreehandROITool/openContourEditLoop.d.ts.map +1 -1
  174. package/dist/types/tools/annotation/planarFreehandROITool/renderMethods.d.ts.map +1 -1
  175. package/dist/types/tools/annotation/splines/Spline.d.ts +2 -0
  176. package/dist/types/tools/annotation/splines/Spline.d.ts.map +1 -1
  177. package/dist/types/tools/base/AnnotationTool.d.ts.map +1 -1
  178. package/dist/types/tools/base/ContourBaseTool.d.ts +1 -0
  179. package/dist/types/tools/base/ContourBaseTool.d.ts.map +1 -1
  180. package/dist/types/tools/base/ContourSegmentationBaseTool.d.ts.map +1 -1
  181. package/dist/types/tools/displayTools/Contour/contourConfig.d.ts.map +1 -1
  182. package/dist/types/types/AnnotationTypes.d.ts +2 -0
  183. package/dist/types/types/AnnotationTypes.d.ts.map +1 -1
  184. package/dist/types/types/ContourAnnotation.d.ts +6 -0
  185. package/dist/types/types/ContourAnnotation.d.ts.map +1 -1
  186. package/dist/types/types/ContourTypes.d.ts +1 -0
  187. package/dist/types/types/ContourTypes.d.ts.map +1 -1
  188. package/dist/types/types/EventTypes.d.ts +4 -1
  189. package/dist/types/types/EventTypes.d.ts.map +1 -1
  190. package/dist/types/types/ISpline.d.ts +1 -0
  191. package/dist/types/types/ISpline.d.ts.map +1 -1
  192. package/dist/types/types/SplineProps.d.ts +1 -0
  193. package/dist/types/types/SplineProps.d.ts.map +1 -1
  194. package/dist/types/utilities/contours/getContourHolesDataCanvas.d.ts +4 -0
  195. package/dist/types/utilities/contours/getContourHolesDataCanvas.d.ts.map +1 -0
  196. package/dist/types/utilities/contours/getContourHolesDataWorld.d.ts +4 -0
  197. package/dist/types/utilities/contours/getContourHolesDataWorld.d.ts.map +1 -0
  198. package/dist/types/utilities/contours/index.d.ts +4 -1
  199. package/dist/types/utilities/contours/index.d.ts.map +1 -1
  200. package/dist/types/utilities/contours/updateContourPolyline.d.ts +11 -0
  201. package/dist/types/utilities/contours/updateContourPolyline.d.ts.map +1 -0
  202. package/dist/types/utilities/math/polyline/containsPoints.d.ts +3 -0
  203. package/dist/types/utilities/math/polyline/containsPoints.d.ts.map +1 -0
  204. package/dist/types/utilities/math/polyline/getWindingDirection.d.ts +3 -0
  205. package/dist/types/utilities/math/polyline/getWindingDirection.d.ts.map +1 -0
  206. package/dist/types/utilities/math/polyline/index.d.ts +3 -1
  207. package/dist/types/utilities/math/polyline/index.d.ts.map +1 -1
  208. package/dist/types/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts +1 -0
  209. package/dist/types/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts.map +1 -1
  210. package/dist/umd/index.js +1 -1
  211. package/dist/umd/index.js.map +1 -1
  212. package/package.json +3 -3
  213. package/src/drawingSvg/drawPath.ts +96 -0
  214. package/src/drawingSvg/drawPolyline.ts +12 -16
  215. package/src/drawingSvg/index.ts +2 -0
  216. package/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +1 -1
  217. package/src/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.ts +194 -58
  218. package/src/stateManagement/annotation/annotationState.ts +101 -0
  219. package/src/stateManagement/annotation/helpers/state.ts +29 -1
  220. package/src/stateManagement/index.js +10 -0
  221. package/src/store/ToolGroupManager/ToolGroup.ts +9 -2
  222. package/src/tools/SegmentationIntersectionTool.ts +1 -1
  223. package/src/tools/annotation/LivewireContourSegmentationTool.ts +1 -1
  224. package/src/tools/annotation/LivewireContourTool.ts +65 -38
  225. package/src/tools/annotation/PlanarFreehandROITool.ts +6 -1
  226. package/src/tools/annotation/SplineROITool.ts +75 -28
  227. package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +20 -11
  228. package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +40 -21
  229. package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +28 -13
  230. package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +28 -10
  231. package/src/tools/annotation/splines/LinearSpline.ts +1 -1
  232. package/src/tools/annotation/splines/Spline.ts +13 -1
  233. package/src/tools/base/AnnotationTool.ts +1 -0
  234. package/src/tools/base/ContourBaseTool.ts +45 -3
  235. package/src/tools/base/ContourSegmentationBaseTool.ts +6 -0
  236. package/src/tools/displayTools/Contour/contourConfig.ts +1 -0
  237. package/src/types/AnnotationTypes.ts +14 -0
  238. package/src/types/ContourAnnotation.ts +13 -0
  239. package/src/types/ContourTypes.ts +3 -0
  240. package/src/types/EventTypes.ts +9 -0
  241. package/src/types/ISpline.ts +3 -0
  242. package/src/types/SplineProps.ts +10 -0
  243. package/src/utilities/contours/getContourHolesDataCanvas.ts +33 -0
  244. package/src/utilities/contours/getContourHolesDataWorld.ts +19 -0
  245. package/src/utilities/contours/index.ts +6 -0
  246. package/src/utilities/contours/updateContourPolyline.ts +74 -0
  247. package/src/utilities/math/polyline/containsPoint.ts +1 -1
  248. package/src/utilities/math/polyline/containsPoints.ts +22 -0
  249. package/src/utilities/math/polyline/getWindingDirection.ts +14 -0
  250. package/src/utilities/math/polyline/index.ts +4 -0
  251. package/src/utilities/math/polyline/planarFreehandROIInternalTypes.ts +1 -0
@@ -0,0 +1,19 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import type { Annotation, ContourAnnotation } from '../../types';
3
+ import { getAnnotation } from '../../stateManagement';
4
+
5
+ /**
6
+ * Get child polylines data in world space for contour annotations that represent the holes
7
+ * @param annotation - Annotation
8
+ * @param viewport - Viewport used to convert the points from world to canvas space
9
+ * @returns An array that contains all child polylines (holes) in world space
10
+ */
11
+ export default function getContourHolesDataWorld(
12
+ annotation: Annotation
13
+ ): Types.Point3[][] {
14
+ const childAnnotationUIDs = annotation.childAnnotationUIDs ?? [];
15
+
16
+ return childAnnotationUIDs.map(
17
+ (uid) => (getAnnotation(uid) as ContourAnnotation).data.contour.polyline
18
+ );
19
+ }
@@ -4,6 +4,9 @@ import mergePoints from './mergePoints';
4
4
  import detectContourHoles from './detectContourHoles';
5
5
  import { generateContourSetsFromLabelmap } from './generateContourSetsFromLabelmap';
6
6
  import AnnotationToPointData from './AnnotationToPointData';
7
+ import getContourHolesDataWorld from './getContourHolesDataWorld';
8
+ import getContourHolesDataCanvas from './getContourHolesDataCanvas';
9
+ import updateContourPolyline from './updateContourPolyline';
7
10
  import acceptAutogeneratedInterpolations from './interpolation/acceptAutogeneratedInterpolations';
8
11
  import * as interpolation from './interpolation';
9
12
  import findHandlePolylineIndex from './findHandlePolylineIndex';
@@ -15,6 +18,9 @@ export {
15
18
  detectContourHoles,
16
19
  generateContourSetsFromLabelmap,
17
20
  AnnotationToPointData,
21
+ getContourHolesDataWorld,
22
+ getContourHolesDataCanvas,
23
+ updateContourPolyline,
18
24
  interpolation,
19
25
  acceptAutogeneratedInterpolations,
20
26
  findHandlePolylineIndex,
@@ -0,0 +1,74 @@
1
+ import { utilities as csUtils } from '@cornerstonejs/core';
2
+ import { Types } from '@cornerstonejs/core';
3
+ import type { ContourAnnotation } from '../../types';
4
+ import type { ContourWindingDirection } from '../../types/ContourAnnotation';
5
+ import * as math from '../math';
6
+ import {
7
+ getParentAnnotation,
8
+ invalidateAnnotation,
9
+ } from '../../stateManagement';
10
+
11
+ /**
12
+ * Update the contour polyline data
13
+ * @param annotation - Contour annotation
14
+ * @param viewport - Viewport
15
+ * @param polylineData - Polyline data (points, winding direction and closed)
16
+ * @param transforms - Methods to convert points to/from canvas and world spaces
17
+ */
18
+ export default function updateContourPolyline(
19
+ annotation: ContourAnnotation,
20
+ polylineData: {
21
+ points: Types.Point2[];
22
+ closed?: boolean;
23
+ targetWindingDirection?: ContourWindingDirection;
24
+ },
25
+ transforms: {
26
+ canvasToWorld: (point: Types.Point2) => Types.Point3;
27
+ }
28
+ ) {
29
+ const { canvasToWorld } = transforms;
30
+ const { data } = annotation;
31
+ const { points: polyline, targetWindingDirection } = polylineData;
32
+ let { closed } = polylineData;
33
+ const numPoints = polyline.length;
34
+ const polylineWorldPoints = new Array(numPoints);
35
+ const currentWindingDirection = math.polyline.getWindingDirection(polyline);
36
+ const parentAnnotation = getParentAnnotation(annotation) as ContourAnnotation;
37
+
38
+ if (closed === undefined) {
39
+ let currentClosedState = false;
40
+
41
+ // With two points it is just a line and do not make sense to consider it closed
42
+ if (polyline.length > 3) {
43
+ const lastToFirstDist = math.point.distanceToPointSquared(
44
+ polyline[0],
45
+ polyline[numPoints - 1]
46
+ );
47
+
48
+ currentClosedState = csUtils.isEqual(0, lastToFirstDist);
49
+ }
50
+
51
+ closed = currentClosedState;
52
+ }
53
+
54
+ // It must be in the opposite direction if it is a child annotation (hole)
55
+ let windingDirection = parentAnnotation
56
+ ? parentAnnotation.data.contour.windingDirection * -1
57
+ : targetWindingDirection;
58
+
59
+ if (windingDirection === undefined) {
60
+ windingDirection = currentWindingDirection;
61
+ } else if (windingDirection !== currentWindingDirection) {
62
+ polyline.reverse();
63
+ }
64
+
65
+ for (let i = 0; i < numPoints; i++) {
66
+ polylineWorldPoints[i] = canvasToWorld(polyline[i]);
67
+ }
68
+
69
+ data.contour.polyline = polylineWorldPoints;
70
+ data.contour.closed = closed;
71
+ data.contour.windingDirection = windingDirection;
72
+
73
+ invalidateAnnotation(annotation);
74
+ }
@@ -10,7 +10,7 @@ import isClosed from './isClosed';
10
10
  *
11
11
  * @param polyline - Polyline points (2D)
12
12
  * @param point - 2D Point
13
- * @returns True is the point is inside the polyline or false otherwise
13
+ * @returns True if the point is inside the polyline or false otherwise
14
14
  */
15
15
  export default function containsPoint(
16
16
  polyline: Types.Point2[],
@@ -0,0 +1,22 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import containsPoint from './containsPoint';
3
+
4
+ /**
5
+ * Checks if a polyline contains a set of points.
6
+ *
7
+ * @param polyline - Polyline points (2D)
8
+ * @param points - 2D points to verify
9
+ * @returns True if all points are inside the polyline or false otherwise
10
+ */
11
+ export default function containsPoints(
12
+ polyline: Types.Point2[],
13
+ points: Types.Point2[]
14
+ ): boolean {
15
+ for (let i = 0, numPoint = points.length; i < numPoint; i++) {
16
+ if (!containsPoint(polyline, points[i])) {
17
+ return false;
18
+ }
19
+ }
20
+
21
+ return true;
22
+ }
@@ -0,0 +1,14 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import getSignedArea from './getSignedArea';
3
+
4
+ /**
5
+ * Calculate the winding direction (CW or CCW) of a polyline
6
+ * @param polyline - Polyline (2D)
7
+ * @returns 1 for CW or -1 for CCW polylines
8
+ */
9
+ export default function getWindingDirection(polyline: Types.Point2[]): number {
10
+ const signedArea = getSignedArea(polyline);
11
+
12
+ // Return 1 or -1 which is also possible to convert into ContourOrientation
13
+ return signedArea >= 0 ? 1 : -1;
14
+ }
@@ -1,8 +1,10 @@
1
1
  import isClosed from './isClosed';
2
2
  import containsPoint from './containsPoint';
3
+ import containsPoints from './containsPoints';
3
4
  import getAABB from './getAABB';
4
5
  import getArea from './getArea';
5
6
  import getSignedArea from './getSignedArea';
7
+ import getWindingDirection from './getWindingDirection';
6
8
  import getNormal3 from './getNormal3';
7
9
  import getNormal2 from './getNormal2';
8
10
  import { mergePolylines, subtractPolylines } from './combinePolyline';
@@ -19,9 +21,11 @@ import pointCanProjectOnLine from './pointCanProjectOnLine';
19
21
  export {
20
22
  isClosed,
21
23
  containsPoint,
24
+ containsPoints,
22
25
  getAABB,
23
26
  getArea,
24
27
  getSignedArea,
28
+ getWindingDirection,
25
29
  getNormal3,
26
30
  getNormal2,
27
31
  intersectPolyline,
@@ -6,6 +6,7 @@ import { PlanarFreehandROIAnnotation } from '../../../types/ToolSpecificAnnotati
6
6
  type PlanarFreehandROIDrawData = {
7
7
  polylineIndex: number;
8
8
  canvasPoints: Types.Point2[];
9
+ contourHoleProcessingEnabled: boolean;
9
10
  };
10
11
 
11
12
  type PlanarFreehandROIEditData = {