@cornerstonejs/tools 2.0.0-beta.20 → 2.0.0-beta.21

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 (485) hide show
  1. package/dist/esm/cursors/SVGCursorDescriptor.d.ts +1 -1
  2. package/dist/esm/cursors/SVGCursorDescriptor.js +7 -0
  3. package/dist/esm/cursors/SVGMouseCursor.d.ts +1 -1
  4. package/dist/esm/drawingSvg/draw.d.ts +2 -1
  5. package/dist/esm/drawingSvg/drawArrow.d.ts +1 -1
  6. package/dist/esm/drawingSvg/drawCircle.d.ts +1 -1
  7. package/dist/esm/drawingSvg/drawEllipse.d.ts +1 -1
  8. package/dist/esm/drawingSvg/drawEllipse.js +1 -0
  9. package/dist/esm/drawingSvg/drawEllipseByCoordinates.d.ts +1 -1
  10. package/dist/esm/drawingSvg/drawHandle.d.ts +1 -1
  11. package/dist/esm/drawingSvg/drawHandles.d.ts +1 -1
  12. package/dist/esm/drawingSvg/drawHeight.d.ts +3 -0
  13. package/dist/esm/drawingSvg/drawHeight.js +42 -0
  14. package/dist/esm/drawingSvg/drawLine.d.ts +1 -1
  15. package/dist/esm/drawingSvg/drawLink.d.ts +1 -1
  16. package/dist/esm/drawingSvg/drawLinkedTextBox.d.ts +1 -1
  17. package/dist/esm/drawingSvg/drawPath.d.ts +1 -1
  18. package/dist/esm/drawingSvg/drawPolyline.d.ts +1 -1
  19. package/dist/esm/drawingSvg/drawRect.d.ts +1 -1
  20. package/dist/esm/drawingSvg/drawRect.js +1 -0
  21. package/dist/esm/drawingSvg/drawRectByCoordinates.d.ts +1 -1
  22. package/dist/esm/drawingSvg/drawRedactionRect.d.ts +3 -1
  23. package/dist/esm/drawingSvg/drawTextBox.d.ts +1 -1
  24. package/dist/esm/drawingSvg/getSvgDrawingHelper.d.ts +1 -1
  25. package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
  26. package/dist/esm/drawingSvg/index.d.ts +2 -1
  27. package/dist/esm/drawingSvg/index.js +2 -1
  28. package/dist/esm/enums/ToolBindings.d.ts +3 -1
  29. package/dist/esm/enums/ToolBindings.js +2 -0
  30. package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.d.ts +1 -1
  31. package/dist/esm/eventDispatchers/keyboardEventHandlers/keyUp.d.ts +1 -1
  32. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.d.ts +1 -1
  33. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownActivate.d.ts +1 -1
  34. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +1 -1
  35. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDrag.d.ts +1 -1
  36. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseMove.d.ts +1 -1
  37. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseWheel.d.ts +2 -1
  38. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseWheel.js +15 -2
  39. package/dist/esm/eventDispatchers/shared/getActiveToolForKeyboardEvent.d.ts +1 -1
  40. package/dist/esm/eventDispatchers/shared/getActiveToolForMouseEvent.d.ts +1 -1
  41. package/dist/esm/eventDispatchers/shared/getActiveToolForMouseEvent.js +3 -4
  42. package/dist/esm/eventDispatchers/shared/getActiveToolForTouchEvent.d.ts +1 -1
  43. package/dist/esm/eventDispatchers/shared/getActiveToolForTouchEvent.js +1 -1
  44. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.d.ts +2 -2
  45. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +4 -3
  46. package/dist/esm/eventDispatchers/shared/getToolsWithModesForMouseEvent.d.ts +3 -3
  47. package/dist/esm/eventDispatchers/shared/getToolsWithModesForTouchEvent.d.ts +2 -2
  48. package/dist/esm/eventDispatchers/touchEventHandlers/touchDrag.d.ts +1 -1
  49. package/dist/esm/eventDispatchers/touchEventHandlers/touchStart.d.ts +1 -1
  50. package/dist/esm/eventDispatchers/touchEventHandlers/touchStartActivate.d.ts +1 -1
  51. package/dist/esm/eventListeners/annotations/annotationCompletedListener.d.ts +1 -1
  52. package/dist/esm/eventListeners/annotations/annotationRemovedListener.d.ts +1 -1
  53. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.d.ts +3 -3
  54. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +1 -1
  55. package/dist/esm/eventListeners/mouse/getMouseEventPoints.d.ts +1 -1
  56. package/dist/esm/eventListeners/mouse/getMouseEventPoints.js +4 -1
  57. package/dist/esm/eventListeners/mouse/mouseDownListener.js +9 -1
  58. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +6 -6
  59. package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.d.ts +1 -1
  60. package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.js +3 -3
  61. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.d.ts +1 -1
  62. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +2 -2
  63. package/dist/esm/eventListeners/segmentation/segmentationModifiedEventListener.d.ts +1 -1
  64. package/dist/esm/eventListeners/segmentation/segmentationModifiedEventListener.js +3 -2
  65. package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.d.ts +1 -1
  66. package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.js +5 -5
  67. package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.d.ts +1 -1
  68. package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.js +4 -2
  69. package/dist/esm/eventListeners/touch/getTouchEventPoints.d.ts +1 -1
  70. package/dist/esm/index.d.ts +2 -2
  71. package/dist/esm/index.js +2 -2
  72. package/dist/esm/stateManagement/annotation/AnnotationRenderingEngine.d.ts +20 -0
  73. package/dist/esm/stateManagement/annotation/AnnotationRenderingEngine.js +112 -0
  74. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.d.ts +3 -3
  75. package/dist/esm/stateManagement/annotation/annotationLocking.d.ts +1 -1
  76. package/dist/esm/stateManagement/annotation/annotationState.d.ts +2 -2
  77. package/dist/esm/stateManagement/annotation/annotationVisibility.d.ts +1 -1
  78. package/dist/esm/stateManagement/annotation/config/ToolStyle.d.ts +1 -1
  79. package/dist/esm/stateManagement/annotation/config/getFont.d.ts +2 -2
  80. package/dist/esm/stateManagement/annotation/config/getState.d.ts +1 -1
  81. package/dist/esm/stateManagement/annotation/config/helpers.d.ts +2 -2
  82. package/dist/esm/stateManagement/annotation/helpers/state.d.ts +2 -2
  83. package/dist/esm/stateManagement/annotation/utilities/defineProperties.d.ts +1 -1
  84. package/dist/esm/stateManagement/index.d.ts +3 -3
  85. package/dist/esm/stateManagement/index.js +2 -2
  86. package/dist/esm/{tools/displayTools → stateManagement/segmentation}/SegmentationRenderingEngine.d.ts +3 -3
  87. package/dist/esm/{tools/displayTools → stateManagement/segmentation}/SegmentationRenderingEngine.js +14 -17
  88. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +12 -12
  89. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +27 -19
  90. package/dist/esm/stateManagement/segmentation/activeSegmentation.d.ts +5 -4
  91. package/dist/esm/stateManagement/segmentation/activeSegmentation.js +12 -5
  92. package/dist/esm/stateManagement/segmentation/addRepresentationData.d.ts +3 -3
  93. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentation.d.ts +3 -0
  94. package/dist/esm/stateManagement/segmentation/{addRepresentation.js → addSegmentationRepresentation.js} +6 -6
  95. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentations.d.ts +3 -0
  96. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentations.js +9 -0
  97. package/dist/esm/stateManagement/segmentation/addSegmentations.d.ts +1 -1
  98. package/dist/esm/stateManagement/segmentation/config/index.d.ts +2 -2
  99. package/dist/esm/stateManagement/segmentation/config/index.js +2 -2
  100. package/dist/esm/stateManagement/segmentation/config/segmentationColor.js +2 -2
  101. package/dist/esm/stateManagement/segmentation/config/segmentationConfig.d.ts +5 -5
  102. package/dist/esm/stateManagement/segmentation/config/segmentationConfig.js +5 -5
  103. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.d.ts +5 -5
  104. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +12 -12
  105. package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.js +3 -7
  106. package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.js +8 -53
  107. package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.d.ts +1 -1
  108. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationRepresentationRenderingConfig.d.ts +2 -0
  109. package/dist/esm/stateManagement/segmentation/helpers/{getRepresentationRenderingConfig.js → getSegmentationRepresentationRenderingConfig.js} +2 -2
  110. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.d.ts +1 -1
  111. package/dist/esm/stateManagement/segmentation/helpers/validateSegmentationInput.d.ts +1 -1
  112. package/dist/esm/stateManagement/segmentation/index.d.ts +3 -3
  113. package/dist/esm/stateManagement/segmentation/index.js +3 -3
  114. package/dist/esm/stateManagement/segmentation/polySeg/Contour/computeAndAddContourRepresentation.d.ts +1 -1
  115. package/dist/esm/stateManagement/segmentation/polySeg/Contour/contourComputationStrategies.d.ts +2 -2
  116. package/dist/esm/stateManagement/segmentation/polySeg/Contour/contourComputationStrategies.js +3 -3
  117. package/dist/esm/stateManagement/segmentation/polySeg/Contour/utils/createAndAddContourSegmentationsFromClippedSurfaces.d.ts +1 -1
  118. package/dist/esm/stateManagement/segmentation/polySeg/Contour/utils/extractContourData.d.ts +2 -2
  119. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/computeAndAddLabelmapRepresentation.d.ts +1 -1
  120. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertContourToLabelmap.d.ts +1 -1
  121. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertContourToLabelmap.js +12 -21
  122. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertSurfaceToLabelmap.d.ts +2 -2
  123. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertSurfaceToLabelmap.js +2 -6
  124. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/labelmapComputationStrategies.d.ts +2 -2
  125. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/labelmapComputationStrategies.js +8 -13
  126. package/dist/esm/stateManagement/segmentation/polySeg/Surface/computeAndAddSurfaceRepresentation.d.ts +1 -1
  127. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertContourToSurface.d.ts +2 -2
  128. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertContourToSurface.js +2 -1
  129. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.d.ts +2 -2
  130. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.js +2 -2
  131. package/dist/esm/stateManagement/segmentation/polySeg/Surface/createAndCacheSurfacesFromRaw.d.ts +2 -2
  132. package/dist/esm/stateManagement/segmentation/polySeg/Surface/createAndCacheSurfacesFromRaw.js +2 -2
  133. package/dist/esm/stateManagement/segmentation/polySeg/Surface/surfaceComputationStrategies.d.ts +1 -1
  134. package/dist/esm/stateManagement/segmentation/polySeg/Surface/updateSurfaceData.js +4 -3
  135. package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.js +2 -2
  136. package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.d.ts +1 -1
  137. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.d.ts +2 -0
  138. package/dist/esm/stateManagement/segmentation/{removeRepresentationsFromViewport.js → removeSegmentationRepresentations.js} +9 -6
  139. package/dist/esm/stateManagement/segmentation/segmentIndex.js +2 -2
  140. package/dist/esm/stateManagement/segmentation/segmentLocking.d.ts +2 -2
  141. package/dist/esm/stateManagement/segmentation/segmentLocking.js +2 -2
  142. package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +16 -16
  143. package/dist/esm/stateManagement/segmentation/segmentationState.js +30 -30
  144. package/dist/esm/store/SynchronizerManager/Synchronizer.d.ts +7 -3
  145. package/dist/esm/store/SynchronizerManager/Synchronizer.js +2 -1
  146. package/dist/esm/store/SynchronizerManager/createSynchronizer.d.ts +3 -3
  147. package/dist/esm/store/SynchronizerManager/createSynchronizer.js +1 -1
  148. package/dist/esm/store/SynchronizerManager/getAllSynchronizers.d.ts +1 -1
  149. package/dist/esm/store/SynchronizerManager/getSynchronizer.d.ts +1 -1
  150. package/dist/esm/store/SynchronizerManager/getSynchronizersForViewport.d.ts +1 -1
  151. package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +3 -3
  152. package/dist/esm/store/ToolGroupManager/ToolGroup.js +5 -2
  153. package/dist/esm/store/ToolGroupManager/createToolGroup.d.ts +1 -1
  154. package/dist/esm/store/ToolGroupManager/destroyToolGroup.js +1 -0
  155. package/dist/esm/store/ToolGroupManager/getAllToolGroups.d.ts +1 -1
  156. package/dist/esm/store/ToolGroupManager/getToolGroup.d.ts +1 -1
  157. package/dist/esm/store/ToolGroupManager/getToolGroupForViewport.d.ts +1 -1
  158. package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.d.ts +1 -1
  159. package/dist/esm/store/addEnabledElement.d.ts +1 -1
  160. package/dist/esm/store/addEnabledElement.js +1 -1
  161. package/dist/esm/store/addTool.js +0 -3
  162. package/dist/esm/store/filterMoveableAnnotationTools.d.ts +1 -1
  163. package/dist/esm/store/filterToolsWithAnnotationsForElement.d.ts +1 -1
  164. package/dist/esm/store/filterToolsWithMoveableHandles.d.ts +1 -1
  165. package/dist/esm/store/removeEnabledElement.d.ts +1 -1
  166. package/dist/esm/store/removeEnabledElement.js +1 -1
  167. package/dist/esm/store/state.d.ts +4 -3
  168. package/dist/esm/store/state.js +1 -1
  169. package/dist/esm/synchronizers/callbacks/areViewportsCoplanar .d.ts +1 -1
  170. package/dist/esm/synchronizers/callbacks/cameraSyncCallback.d.ts +2 -2
  171. package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.d.ts +2 -2
  172. package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.d.ts +1 -1
  173. package/dist/esm/synchronizers/callbacks/slabThicknessSyncCallback.d.ts +1 -1
  174. package/dist/esm/synchronizers/callbacks/voiSyncCallback.d.ts +5 -2
  175. package/dist/esm/synchronizers/callbacks/zoomPanSyncCallback.d.ts +2 -2
  176. package/dist/esm/synchronizers/synchronizers/createCameraPositionSynchronizer.d.ts +1 -1
  177. package/dist/esm/synchronizers/synchronizers/createImageSliceSynchronizer.d.ts +1 -1
  178. package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts +2 -2
  179. package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.js +1 -1
  180. package/dist/esm/synchronizers/synchronizers/createSlabThicknessSynchronizer.d.ts +1 -1
  181. package/dist/esm/synchronizers/synchronizers/createVOISynchronizer.d.ts +1 -1
  182. package/dist/esm/synchronizers/synchronizers/createZoomPanSynchronizer.d.ts +1 -1
  183. package/dist/esm/tools/AdvancedMagnifyTool.d.ts +4 -6
  184. package/dist/esm/tools/AdvancedMagnifyViewport.js +1 -1
  185. package/dist/esm/tools/AdvancedMagnifyViewportManager.d.ts +3 -2
  186. package/dist/esm/tools/AdvancedMagnifyViewportManager.js +1 -1
  187. package/dist/esm/tools/AnnotationEraserTool.d.ts +1 -1
  188. package/dist/esm/tools/CrosshairsTool.d.ts +5 -5
  189. package/dist/esm/tools/CrosshairsTool.js +4 -3
  190. package/dist/esm/tools/MIPJumpToClickTool.d.ts +1 -2
  191. package/dist/esm/tools/MIPJumpToClickTool.js +2 -3
  192. package/dist/esm/tools/MagnifyTool.d.ts +2 -3
  193. package/dist/esm/tools/OrientationMarkerTool.d.ts +41 -58
  194. package/dist/esm/tools/OrientationMarkerTool.js +8 -7
  195. package/dist/esm/tools/OverlayGridTool.d.ts +2 -4
  196. package/dist/esm/tools/OverlayGridTool.js +1 -1
  197. package/dist/esm/tools/PanTool.d.ts +1 -1
  198. package/dist/esm/tools/PanTool.js +5 -0
  199. package/dist/esm/tools/PlanarRotateTool.d.ts +3 -1
  200. package/dist/esm/tools/PlanarRotateTool.js +18 -4
  201. package/dist/esm/tools/ReferenceCursors.d.ts +2 -5
  202. package/dist/esm/tools/ReferenceLinesTool.d.ts +4 -6
  203. package/dist/esm/tools/ReferenceLinesTool.js +1 -1
  204. package/dist/esm/tools/ScaleOverlayTool.d.ts +7 -9
  205. package/dist/esm/tools/ScaleOverlayTool.js +1 -2
  206. package/dist/esm/tools/SculptorTool/CircleSculptCursor.d.ts +4 -4
  207. package/dist/esm/tools/SculptorTool.d.ts +1 -1
  208. package/dist/esm/tools/SegmentationIntersectionTool.d.ts +2 -2
  209. package/dist/esm/tools/StackScrollTool.d.ts +2 -1
  210. package/dist/esm/tools/StackScrollTool.js +17 -3
  211. package/dist/esm/tools/StackScrollToolMouseWheelTool.d.ts +1 -2
  212. package/dist/esm/tools/StackScrollToolMouseWheelTool.js +1 -2
  213. package/dist/esm/tools/TrackballRotateTool.d.ts +1 -1
  214. package/dist/esm/tools/TrackballRotateTool.js +4 -0
  215. package/dist/esm/tools/VolumeRotateMouseWheelTool.d.ts +2 -3
  216. package/dist/esm/tools/WindowLevelRegionTool.d.ts +3 -3
  217. package/dist/esm/tools/WindowLevelRegionTool.js +1 -3
  218. package/dist/esm/tools/WindowLevelTool.d.ts +1 -1
  219. package/dist/esm/tools/WindowLevelTool.js +12 -7
  220. package/dist/esm/tools/ZoomTool.d.ts +2 -2
  221. package/dist/esm/tools/ZoomTool.js +2 -2
  222. package/dist/esm/tools/annotation/AngleTool.d.ts +5 -7
  223. package/dist/esm/tools/annotation/ArrowAnnotateTool.d.ts +5 -7
  224. package/dist/esm/tools/annotation/BidirectionalTool.d.ts +5 -7
  225. package/dist/esm/tools/annotation/CircleROITool.d.ts +5 -7
  226. package/dist/esm/tools/annotation/CircleROITool.js +8 -5
  227. package/dist/esm/tools/annotation/CobbAngleTool.d.ts +5 -7
  228. package/dist/esm/tools/annotation/DragProbeTool.d.ts +3 -5
  229. package/dist/esm/tools/annotation/DragProbeTool.js +0 -5
  230. package/dist/esm/tools/annotation/EllipticalROITool.d.ts +5 -7
  231. package/dist/esm/tools/annotation/EllipticalROITool.js +8 -3
  232. package/dist/esm/tools/annotation/HeightTool.d.ts +36 -0
  233. package/dist/esm/tools/annotation/HeightTool.js +435 -0
  234. package/dist/esm/tools/annotation/KeyImageTool.d.ts +4 -6
  235. package/dist/esm/tools/annotation/LengthTool.d.ts +5 -7
  236. package/dist/esm/tools/annotation/LengthTool.js +7 -5
  237. package/dist/esm/tools/annotation/LivewireContourTool.d.ts +3 -4
  238. package/dist/esm/tools/annotation/LivewireContourTool.js +2 -1
  239. package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +21 -4
  240. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +155 -113
  241. package/dist/esm/tools/annotation/ProbeTool.d.ts +4 -6
  242. package/dist/esm/tools/annotation/ProbeTool.js +14 -29
  243. package/dist/esm/tools/annotation/RectangleROITool.d.ts +5 -5
  244. package/dist/esm/tools/annotation/RectangleROITool.js +7 -3
  245. package/dist/esm/tools/annotation/SplineContourSegmentationTool.d.ts +1 -1
  246. package/dist/esm/tools/annotation/SplineROITool.d.ts +1 -3
  247. package/dist/esm/tools/annotation/SplineROITool.js +2 -2
  248. package/dist/esm/tools/annotation/UltrasoundDirectionalTool.d.ts +5 -7
  249. package/dist/esm/tools/annotation/VideoRedactionTool.d.ts +4 -5
  250. package/dist/esm/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.d.ts +1 -1
  251. package/dist/esm/tools/annotation/splines/CardinalSpline.d.ts +1 -1
  252. package/dist/esm/tools/annotation/splines/CubicSpline.d.ts +1 -1
  253. package/dist/esm/tools/annotation/splines/QuadraticSpline.d.ts +1 -1
  254. package/dist/esm/tools/annotation/splines/Spline.d.ts +1 -1
  255. package/dist/esm/tools/base/AnnotationDisplayTool.d.ts +3 -3
  256. package/dist/esm/tools/base/AnnotationDisplayTool.js +3 -9
  257. package/dist/esm/tools/base/AnnotationTool.d.ts +3 -14
  258. package/dist/esm/tools/base/BaseTool.d.ts +5 -5
  259. package/dist/esm/tools/base/BaseTool.js +1 -1
  260. package/dist/esm/tools/base/ContourBaseTool.d.ts +1 -1
  261. package/dist/esm/tools/base/ContourBaseTool.js +3 -3
  262. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +10 -10
  263. package/dist/esm/tools/displayTools/Contour/contourConfig.d.ts +1 -1
  264. package/dist/esm/tools/displayTools/Contour/contourDisplay.d.ts +2 -2
  265. package/dist/esm/tools/displayTools/Contour/contourDisplay.js +2 -1
  266. package/dist/esm/tools/displayTools/Contour/contourHandler/handleContourSegmentation.d.ts +2 -2
  267. package/dist/esm/tools/displayTools/Contour/contourHandler/handleContourSegmentation.js +4 -4
  268. package/dist/esm/tools/displayTools/Contour/contourHandler/utils.d.ts +1 -1
  269. package/dist/esm/tools/displayTools/Contour/removeContourFromElement.js +2 -2
  270. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +1 -1
  271. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +3 -3
  272. package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.d.ts +1 -1
  273. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +5 -5
  274. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +10 -8
  275. package/dist/esm/tools/displayTools/Labelmap/validateLabelmap.d.ts +2 -2
  276. package/dist/esm/tools/displayTools/Surface/surfaceConfig.d.ts +1 -1
  277. package/dist/esm/tools/displayTools/Surface/surfaceDisplay.d.ts +2 -2
  278. package/dist/esm/tools/distancePointToContour.d.ts +1 -1
  279. package/dist/esm/tools/index.d.ts +2 -1
  280. package/dist/esm/tools/index.js +2 -1
  281. package/dist/esm/tools/segmentation/BrushTool.js +5 -5
  282. package/dist/esm/tools/segmentation/CircleROIStartEndThresholdTool.d.ts +20 -15
  283. package/dist/esm/tools/segmentation/CircleROIStartEndThresholdTool.js +199 -67
  284. package/dist/esm/tools/segmentation/CircleScissorsTool.d.ts +3 -3
  285. package/dist/esm/tools/segmentation/CircleScissorsTool.js +10 -3
  286. package/dist/esm/tools/segmentation/PaintFillTool.d.ts +1 -1
  287. package/dist/esm/tools/segmentation/PaintFillTool.js +15 -14
  288. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.d.ts +20 -10
  289. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +174 -55
  290. package/dist/esm/tools/segmentation/RectangleROIThresholdTool.d.ts +3 -3
  291. package/dist/esm/tools/segmentation/RectangleScissorsTool.d.ts +4 -3
  292. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +8 -5
  293. package/dist/esm/tools/segmentation/SegmentSelectTool.d.ts +2 -2
  294. package/dist/esm/tools/segmentation/SegmentSelectTool.js +2 -2
  295. package/dist/esm/tools/segmentation/SphereScissorsTool.d.ts +3 -2
  296. package/dist/esm/tools/segmentation/SphereScissorsTool.js +12 -4
  297. package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +4 -5
  298. package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +3 -1
  299. package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +6 -3
  300. package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +1 -1
  301. package/dist/esm/tools/segmentation/strategies/compositions/islandRemoval.js +1 -1
  302. package/dist/esm/tools/segmentation/strategies/compositions/preview.js +2 -2
  303. package/dist/esm/tools/segmentation/strategies/compositions/regionFill.js +6 -3
  304. package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +1 -1
  305. package/dist/esm/tools/segmentation/strategies/eraseRectangle.d.ts +1 -1
  306. package/dist/esm/tools/segmentation/strategies/fillCircle.js +1 -1
  307. package/dist/esm/tools/segmentation/strategies/fillRectangle.d.ts +1 -1
  308. package/dist/esm/tools/segmentation/strategies/fillRectangle.js +10 -7
  309. package/dist/esm/tools/segmentation/strategies/fillSphere.js +1 -1
  310. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.d.ts +1 -1
  311. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +7 -24
  312. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +9 -2
  313. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +3 -3
  314. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js +0 -3
  315. package/dist/esm/types/AnnotationGroupSelector.d.ts +1 -1
  316. package/dist/esm/types/AnnotationRenderContext.d.ts +3 -2
  317. package/dist/esm/types/AnnotationStyle.d.ts +2 -2
  318. package/dist/esm/types/AnnotationTypes.d.ts +3 -3
  319. package/dist/esm/types/BoundsIJK.d.ts +1 -1
  320. package/dist/esm/types/CINETypes.d.ts +1 -0
  321. package/dist/esm/types/CalculatorTypes.d.ts +1 -1
  322. package/dist/esm/types/CardinalSplineProps.d.ts +1 -1
  323. package/dist/esm/types/ClosestPoint.d.ts +1 -1
  324. package/dist/esm/types/ContourAnnotation.d.ts +1 -1
  325. package/dist/esm/types/ContourSegmentationAnnotation.d.ts +2 -2
  326. package/dist/esm/types/ControlPointInfo.d.ts +1 -1
  327. package/dist/esm/types/EventTypes.d.ts +13 -12
  328. package/dist/esm/types/FloodFillTypes.d.ts +2 -2
  329. package/dist/esm/types/IAnnotationManager.d.ts +3 -3
  330. package/dist/esm/types/IDistance.d.ts +1 -1
  331. package/dist/esm/types/IPoints.d.ts +2 -2
  332. package/dist/esm/types/ISetToolModeOptions.d.ts +2 -2
  333. package/dist/esm/types/ISpline.d.ts +1 -1
  334. package/dist/esm/types/ISynchronizerEventHandler.d.ts +3 -3
  335. package/dist/esm/types/IToolClassReference.d.ts +3 -3
  336. package/dist/esm/types/IToolGroup.d.ts +8 -8
  337. package/dist/esm/types/ITouchPoints.d.ts +2 -2
  338. package/dist/esm/types/InteractionTypes.d.ts +1 -1
  339. package/dist/esm/types/InternalToolTypes.d.ts +4 -4
  340. package/dist/esm/types/InterpolationTypes.d.ts +3 -3
  341. package/dist/esm/types/JumpToSliceOptions.d.ts +1 -1
  342. package/dist/esm/types/LabelmapToolOperationData.d.ts +3 -2
  343. package/dist/esm/types/PlanarBoundingBox.d.ts +1 -1
  344. package/dist/esm/types/SVGDrawingHelper.d.ts +1 -1
  345. package/dist/esm/types/ScrollOptions.d.ts +1 -1
  346. package/dist/esm/types/SegmentationStateTypes.d.ts +7 -6
  347. package/dist/esm/types/SplineCurveSegment.d.ts +1 -1
  348. package/dist/esm/types/SplineLineSegment.d.ts +1 -1
  349. package/dist/esm/types/ToolAction.d.ts +1 -1
  350. package/dist/esm/types/ToolHandle.d.ts +1 -1
  351. package/dist/esm/types/ToolProps.d.ts +1 -1
  352. package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +34 -12
  353. package/dist/esm/types/index.d.ts +2 -2
  354. package/dist/esm/utilities/annotationFrameRange.d.ts +1 -1
  355. package/dist/esm/utilities/annotationHydration.d.ts +3 -2
  356. package/dist/esm/utilities/cine/playClip.d.ts +6 -2
  357. package/dist/esm/utilities/cine/playClip.js +53 -6
  358. package/dist/esm/utilities/cine/state.d.ts +1 -1
  359. package/dist/esm/utilities/contourSegmentation/addContourSegmentationAnnotation.d.ts +1 -1
  360. package/dist/esm/utilities/contourSegmentation/areSameSegment.d.ts +1 -1
  361. package/dist/esm/utilities/contourSegmentation/isContourSegmentationAnnotation.d.ts +2 -2
  362. package/dist/esm/utilities/contourSegmentation/removeContourSegmentationAnnotation.d.ts +1 -1
  363. package/dist/esm/utilities/contours/AnnotationToPointData.d.ts +1 -1
  364. package/dist/esm/utilities/contours/areCoplanarContours.d.ts +1 -1
  365. package/dist/esm/utilities/contours/findHandlePolylineIndex.d.ts +1 -1
  366. package/dist/esm/utilities/contours/interpolation/createPolylineToolData.d.ts +1 -1
  367. package/dist/esm/utilities/contours/interpolation/getInterpolationData.d.ts +1 -1
  368. package/dist/esm/utilities/contours/interpolation/interpolate.d.ts +1 -1
  369. package/dist/esm/utilities/contours/reverseIfAntiClockwise.d.ts +1 -1
  370. package/dist/esm/utilities/contours/updateContourPolyline.d.ts +1 -1
  371. package/dist/esm/utilities/dynamicVolume/generateImageFromTimeData.d.ts +3 -2
  372. package/dist/esm/utilities/dynamicVolume/generateImageFromTimeData.js +31 -23
  373. package/dist/esm/utilities/dynamicVolume/getDataInTime.d.ts +1 -1
  374. package/dist/esm/utilities/dynamicVolume/getDataInTime.js +14 -9
  375. package/dist/esm/utilities/getAnnotationNearPoint.d.ts +1 -1
  376. package/dist/esm/utilities/getCalibratedUnits.d.ts +0 -6
  377. package/dist/esm/utilities/getCalibratedUnits.js +13 -4
  378. package/dist/esm/utilities/getPixelValueUnits.d.ts +2 -1
  379. package/dist/esm/utilities/getPixelValueUnits.js +1 -0
  380. package/dist/esm/utilities/getSphereBoundsInfo.d.ts +1 -1
  381. package/dist/esm/utilities/getToolsWithModesForElement.d.ts +1 -1
  382. package/dist/esm/utilities/getVOIMultipliers.d.ts +1 -1
  383. package/dist/esm/utilities/index.d.ts +1 -3
  384. package/dist/esm/utilities/index.js +1 -3
  385. package/dist/esm/utilities/livewire/LiveWirePath.d.ts +1 -1
  386. package/dist/esm/utilities/livewire/LivewireScissors.d.ts +1 -1
  387. package/dist/esm/utilities/math/aabb/distanceToPoint.d.ts +1 -1
  388. package/dist/esm/utilities/math/aabb/distanceToPointSquared.d.ts +1 -1
  389. package/dist/esm/utilities/math/aabb/intersectAABB.d.ts +1 -1
  390. package/dist/esm/utilities/math/basic/BasicStatsCalculator.d.ts +2 -2
  391. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +1 -1
  392. package/dist/esm/utilities/math/basic/Calculator.d.ts +1 -1
  393. package/dist/esm/utilities/math/circle/getCanvasCircleCorners.d.ts +1 -1
  394. package/dist/esm/utilities/math/circle/getCanvasCircleRadius.d.ts +1 -1
  395. package/dist/esm/utilities/math/line/distanceToPointSquared.d.ts +1 -1
  396. package/dist/esm/utilities/math/midPoint.d.ts +1 -1
  397. package/dist/esm/utilities/math/point/mirror.d.ts +1 -1
  398. package/dist/esm/utilities/math/polyline/addCanvasPointsToArray.d.ts +1 -1
  399. package/dist/esm/utilities/math/polyline/combinePolyline.d.ts +1 -1
  400. package/dist/esm/utilities/math/polyline/getAABB.d.ts +1 -1
  401. package/dist/esm/utilities/math/polyline/getLinesIntersection.d.ts +1 -1
  402. package/dist/esm/utilities/math/polyline/getNormal2.d.ts +1 -1
  403. package/dist/esm/utilities/math/polyline/getNormal3.d.ts +1 -1
  404. package/dist/esm/utilities/math/polyline/intersectPolyline.d.ts +1 -1
  405. package/dist/esm/utilities/math/polyline/planarFreehandROIInternalTypes.d.ts +2 -2
  406. package/dist/esm/utilities/math/sphere/pointInSphere.d.ts +1 -1
  407. package/dist/esm/utilities/orientation/getOrientationStringLPS.d.ts +1 -1
  408. package/dist/esm/utilities/planar/filterAnnotationsForDisplay.d.ts +1 -1
  409. package/dist/esm/utilities/planar/filterAnnotationsWithinPlane.d.ts +3 -0
  410. package/dist/esm/utilities/planar/filterAnnotationsWithinPlane.js +26 -0
  411. package/dist/esm/utilities/planar/filterAnnotationsWithinSlice.d.ts +1 -1
  412. package/dist/esm/utilities/planar/index.d.ts +3 -1
  413. package/dist/esm/utilities/planar/index.js +3 -1
  414. package/dist/esm/utilities/planarFreehandROITool/interpolation/algorithms/bspline.d.ts +1 -1
  415. package/dist/esm/utilities/planarFreehandROITool/interpolation/interpolateSegmentPoints.d.ts +1 -1
  416. package/dist/esm/utilities/planarFreehandROITool/smoothAnnotation.d.ts +2 -2
  417. package/dist/esm/utilities/planarFreehandROITool/smoothPoints.d.ts +11 -3
  418. package/dist/esm/utilities/polyData/utils.d.ts +1 -1
  419. package/dist/esm/utilities/scroll.d.ts +4 -3
  420. package/dist/esm/utilities/scroll.js +3 -10
  421. package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.d.ts +1 -1
  422. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.d.ts +2 -11
  423. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
  424. package/dist/esm/utilities/segmentation/createMergedLabelmapForIndex.d.ts +1 -1
  425. package/dist/esm/utilities/segmentation/createMergedLabelmapForIndex.js +7 -7
  426. package/dist/esm/utilities/segmentation/floodFill.d.ts +1 -1
  427. package/dist/esm/utilities/segmentation/getDefaultRepresentationConfig.d.ts +1 -1
  428. package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +8 -5
  429. package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.d.ts +1 -1
  430. package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +7 -4
  431. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +4 -5
  432. package/dist/esm/utilities/segmentation/index.d.ts +2 -2
  433. package/dist/esm/utilities/segmentation/index.js +2 -2
  434. package/dist/esm/utilities/segmentation/isValidRepresentationConfig.d.ts +1 -1
  435. package/dist/esm/utilities/segmentation/rectangleROIThresholdVolumeByRange.d.ts +1 -1
  436. package/dist/esm/utilities/segmentation/rectangleROIThresholdVolumeByRange.js +3 -2
  437. package/dist/esm/utilities/segmentation/segmentContourAction.d.ts +1 -1
  438. package/dist/esm/utilities/segmentation/segmentContourAction.js +4 -4
  439. package/dist/esm/utilities/segmentation/thresholdSegmentationByRange.d.ts +2 -2
  440. package/dist/esm/utilities/segmentation/thresholdSegmentationByRange.js +24 -17
  441. package/dist/esm/utilities/segmentation/thresholdVolumeByRange.d.ts +3 -3
  442. package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js +21 -12
  443. package/dist/esm/utilities/segmentation/triggerSegmentationRender.d.ts +3 -3
  444. package/dist/esm/utilities/segmentation/triggerSegmentationRender.js +7 -5
  445. package/dist/esm/utilities/segmentation/utilities.d.ts +12 -2
  446. package/dist/esm/utilities/segmentation/utilities.js +5 -6
  447. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js +30 -25
  448. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +3 -8
  449. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js +2 -3
  450. package/dist/esm/utilities/stackPrefetch/state.d.ts +20 -1
  451. package/dist/esm/utilities/touch/index.d.ts +1 -1
  452. package/dist/esm/utilities/triggerAnnotationRender.d.ts +0 -20
  453. package/dist/esm/utilities/triggerAnnotationRender.js +1 -112
  454. package/dist/esm/utilities/viewport/isViewportPreScaled.d.ts +1 -1
  455. package/dist/esm/utilities/viewport/isViewportPreScaled.js +2 -5
  456. package/dist/esm/utilities/viewport/jumpToSlice.d.ts +1 -1
  457. package/dist/esm/utilities/viewport/jumpToSlice.js +4 -6
  458. package/dist/esm/utilities/voi/colorbar/ColorbarCanvas.d.ts +2 -2
  459. package/dist/esm/utilities/voi/colorbar/ViewportColorbar.d.ts +1 -1
  460. package/dist/esm/utilities/voi/colorbar/ViewportColorbar.js +1 -1
  461. package/dist/esm/utilities/voi/colorbar/types/ColorbarCanvasProps.d.ts +1 -1
  462. package/dist/esm/utilities/voi/colorbar/types/ColorbarCommonProps.d.ts +1 -1
  463. package/dist/esm/utilities/voi/colorbar/types/ColorbarProps.d.ts +3 -3
  464. package/dist/esm/utilities/voi/windowlevel/extractWindowLevelRegionToolData.d.ts +8 -0
  465. package/dist/esm/utilities/voi/windowlevel/extractWindowLevelRegionToolData.js +4 -10
  466. package/dist/esm/widgets/types/index.d.ts +2 -2
  467. package/dist/esm/workers/polySegConverters.js +65 -32
  468. package/dist/umd/78.index.js +1 -1
  469. package/dist/umd/78.index.js.map +1 -1
  470. package/dist/umd/985.index.js +1 -1
  471. package/dist/umd/985.index.js.map +1 -1
  472. package/dist/umd/index.js +1 -1
  473. package/dist/umd/index.js.map +1 -1
  474. package/package.json +5 -7
  475. package/dist/esm/stateManagement/segmentation/addRepresentation.d.ts +0 -3
  476. package/dist/esm/stateManagement/segmentation/addRepresentations.d.ts +0 -3
  477. package/dist/esm/stateManagement/segmentation/addRepresentations.js +0 -9
  478. package/dist/esm/stateManagement/segmentation/helpers/getRepresentationRenderingConfig.d.ts +0 -2
  479. package/dist/esm/stateManagement/segmentation/removeRepresentationsFromViewport.d.ts +0 -2
  480. package/dist/esm/utilities/pointInShapeCallback.d.ts +0 -18
  481. package/dist/esm/utilities/pointInShapeCallback.js +0 -82
  482. package/dist/esm/utilities/pointInSurroundingSphereCallback.d.ts +0 -4
  483. package/dist/esm/utilities/pointInSurroundingSphereCallback.js +0 -63
  484. package/dist/esm/utilities/segmentation/triggerSegmentationRenderForViewports.d.ts +0 -3
  485. package/dist/esm/utilities/segmentation/triggerSegmentationRenderForViewports.js +0 -6
@@ -1,26 +1,37 @@
1
- import { StackViewport, cache, getEnabledElement, utilities as csUtils, metaData, triggerEvent, eventTarget, } from '@cornerstonejs/core';
1
+ import { StackViewport, cache, getEnabledElement, utilities as csUtils, utilities as coreUtils, } from '@cornerstonejs/core';
2
2
  import { vec3 } from 'gl-matrix';
3
- import { Events } from '../../enums';
4
3
  import { addAnnotation, removeAnnotation, getAnnotations, } from '../../stateManagement/annotation/annotationState';
5
4
  import { isAnnotationLocked } from '../../stateManagement/annotation/annotationLocking';
6
- import { drawCircle as drawCircleSvg, drawHandles as drawHandlesSvg, } from '../../drawingSvg';
5
+ import { drawCircle as drawCircleSvg, drawHandles as drawHandlesSvg, drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg';
7
6
  import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
7
+ import getWorldWidthAndHeightFromTwoPoints from '../../utilities/planar/getWorldWidthAndHeightFromTwoPoints';
8
+ import { getTextBoxCoordsCanvas } from '../../utilities/drawing';
8
9
  import throttle from '../../utilities/throttle';
9
10
  import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
10
11
  import { hideElementCursor, resetElementCursor, } from '../../cursors/elementCursor';
11
12
  import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
12
- import { triggerAnnotationCompleted } from '../../stateManagement/annotation/helpers/state';
13
+ import { triggerAnnotationCompleted, triggerAnnotationModified, } from '../../stateManagement/annotation/helpers/state';
13
14
  import CircleROITool from '../annotation/CircleROITool';
14
15
  import { getCanvasCircleCorners, getCanvasCircleRadius, } from '../../utilities/math/circle';
16
+ import { getCalibratedLengthUnitsAndScale, getCalibratedAspect, } from '../../utilities/getCalibratedUnits';
17
+ import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
15
18
  import { pointInEllipse } from '../../utilities/math/ellipse';
16
- import { pointInShapeCallback } from '../../utilities';
19
+ import { roundNumber } from '../../utilities';
20
+ import { BasicStatsCalculator } from '../../utilities/math/basic';
21
+ import cloneDeep from 'lodash.clonedeep';
22
+ import { filterAnnotationsWithinSamePlane } from '../../utilities/planar';
23
+ import { getPixelValueUnits } from '../../utilities/getPixelValueUnits';
17
24
  const { transformWorldToIndex } = csUtils;
18
25
  class CircleROIStartEndThresholdTool extends CircleROITool {
19
26
  constructor(toolProps = {}, defaultToolProps = {
20
27
  supportedInteractionTypes: ['Mouse', 'Touch'],
21
28
  configuration: {
29
+ storePointData: false,
22
30
  numSlicesToPropagate: 10,
23
31
  calculatePointsInsideVolume: false,
32
+ getTextLines: defaultGetTextLines,
33
+ statsCalculator: BasicStatsCalculator,
34
+ showTextBox: false,
24
35
  },
25
36
  }) {
26
37
  super(toolProps, defaultToolProps);
@@ -45,8 +56,8 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
45
56
  referencedImageId = csUtils.getClosestImageId(imageVolume, worldPos, viewPlaneNormal);
46
57
  }
47
58
  const spacingInNormal = csUtils.getSpacingInNormalDirection(imageVolume, viewPlaneNormal);
48
- const newStartIndex = this._getStartSliceIndex(imageVolume, worldPos, spacingInNormal, viewPlaneNormal);
49
- const endIndex = this._getEndSliceIndex(imageVolume, worldPos, spacingInNormal, viewPlaneNormal);
59
+ const startCoord = this._getStartCoordinate(worldPos, spacingInNormal, viewPlaneNormal);
60
+ const endCoord = this._getEndCoordinate(worldPos, spacingInNormal, viewPlaneNormal);
50
61
  const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
51
62
  const annotation = {
52
63
  highlighted: true,
@@ -63,13 +74,18 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
63
74
  },
64
75
  data: {
65
76
  label: '',
66
- startSlice: newStartIndex,
67
- endSlice: endIndex,
77
+ startCoordinate: startCoord,
78
+ endCoordinate: endCoord,
68
79
  handles: {
69
80
  textBox: {
70
81
  hasMoved: false,
71
- worldPosition: null,
72
- worldBoundingBox: null,
82
+ worldPosition: [0, 0, 0],
83
+ worldBoundingBox: {
84
+ topLeft: [0, 0, 0],
85
+ topRight: [0, 0, 0],
86
+ bottomLeft: [0, 0, 0],
87
+ bottomRight: [0, 0, 0],
88
+ },
73
89
  },
74
90
  points: [[...worldPos], [...worldPos]],
75
91
  activeHandleIndex: null,
@@ -77,10 +93,12 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
77
93
  cachedStats: {
78
94
  pointsInVolume: [],
79
95
  projectionPoints: [],
96
+ statistics: [],
80
97
  },
81
98
  labelmapUID: null,
82
99
  },
83
100
  };
101
+ this._computeProjectionPoints(annotation, imageVolume);
84
102
  addAnnotation(annotation, element);
85
103
  const viewportIdsToRender = getViewportIdsWithToolToRender(element, this.getToolName());
86
104
  this.editData = {
@@ -118,7 +136,7 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
118
136
  const targetId = this.getTargetId(enabledElement.viewport);
119
137
  const imageVolume = cache.getVolume(targetId.split(/volumeId:|\?/)[1]);
120
138
  if (this.configuration.calculatePointsInsideVolume) {
121
- this._computePointsInsideVolume(annotation, imageVolume, enabledElement);
139
+ this._computePointsInsideVolume(annotation, imageVolume, targetId, enabledElement);
122
140
  }
123
141
  triggerAnnotationRenderForViewportIds(viewportIdsToRender);
124
142
  if (newAnnotation) {
@@ -128,11 +146,11 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
128
146
  this.renderAnnotation = (enabledElement, svgDrawingHelper) => {
129
147
  let renderStatus = false;
130
148
  const { viewport } = enabledElement;
131
- const annotations = getAnnotations(this.getToolName(), viewport.element);
149
+ let annotations = getAnnotations(this.getToolName(), viewport.element);
132
150
  if (!annotations?.length) {
133
151
  return renderStatus;
134
152
  }
135
- const sliceIndex = viewport.getCurrentImageIdIndex();
153
+ annotations = filterAnnotationsWithinSamePlane(annotations, viewport.getCamera());
136
154
  const styleSpecifier = {
137
155
  toolGroupId: this.toolGroupId,
138
156
  toolName: this.getToolName(),
@@ -141,7 +159,7 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
141
159
  for (let i = 0; i < annotations.length; i++) {
142
160
  const annotation = annotations[i];
143
161
  const { annotationUID, data } = annotation;
144
- const { startSlice, endSlice } = data;
162
+ const { startCoordinate, endCoordinate } = data;
145
163
  const { points, activeHandleIndex } = data.handles;
146
164
  styleSpecifier.annotationUID = annotationUID;
147
165
  const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
@@ -151,16 +169,31 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
151
169
  const center = canvasCoordinates[0];
152
170
  const radius = getCanvasCircleRadius(canvasCoordinates);
153
171
  const { centerPointRadius } = this.configuration;
154
- if (sliceIndex < Math.min(startSlice, endSlice) ||
155
- sliceIndex > Math.max(startSlice, endSlice)) {
172
+ const canvasCorners = getCanvasCircleCorners(canvasCoordinates);
173
+ const focalPoint = viewport.getCamera().focalPoint;
174
+ const viewplaneNormal = viewport.getCamera().viewPlaneNormal;
175
+ let startCoord = startCoordinate;
176
+ let endCoord = endCoordinate;
177
+ if (Array.isArray(startCoordinate)) {
178
+ startCoord = this._getCoordinateForViewplaneNormal(startCoord, viewplaneNormal);
179
+ }
180
+ if (Array.isArray(endCoordinate)) {
181
+ endCoord = this._getCoordinateForViewplaneNormal(endCoord, viewplaneNormal);
182
+ }
183
+ const roundedStartCoord = coreUtils.roundToPrecision(startCoord);
184
+ const roundedEndCoord = coreUtils.roundToPrecision(endCoord);
185
+ const coord = this._getCoordinateForViewplaneNormal(focalPoint, viewplaneNormal);
186
+ const roundedCoord = coreUtils.roundToPrecision(coord);
187
+ if (roundedCoord < Math.min(roundedStartCoord, roundedEndCoord) ||
188
+ roundedCoord > Math.max(roundedStartCoord, roundedEndCoord)) {
156
189
  continue;
157
190
  }
158
191
  if (annotation.invalidated) {
159
192
  this._throttledCalculateCachedStats(annotation, enabledElement);
160
193
  }
161
- const middleSlice = Math.round((startSlice + endSlice) / 2);
194
+ const middleCoord = coreUtils.roundToPrecision((startCoord + endCoord) / 2);
162
195
  let isMiddleSlice = false;
163
- if (sliceIndex === middleSlice) {
196
+ if (roundedCoord === middleCoord) {
164
197
  isMiddleSlice = true;
165
198
  }
166
199
  if (!viewport.getRenderingEngine()) {
@@ -184,13 +217,18 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
184
217
  });
185
218
  }
186
219
  let lineWidthToUse = lineWidth;
220
+ let lineDashToUse = lineDash;
187
221
  if (isMiddleSlice) {
188
- lineWidthToUse = 3;
222
+ lineWidthToUse = lineWidth;
223
+ lineDashToUse = [];
224
+ }
225
+ else {
226
+ lineDashToUse = [5, 5];
189
227
  }
190
228
  const circleUID = '0';
191
229
  drawCircleSvg(svgDrawingHelper, annotationUID, circleUID, center, radius, {
192
230
  color,
193
- lineDash,
231
+ lineDash: lineDashToUse,
194
232
  lineWidth: lineWidthToUse,
195
233
  });
196
234
  if (centerPointRadius > 0) {
@@ -203,6 +241,43 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
203
241
  }
204
242
  }
205
243
  renderStatus = true;
244
+ if (this.configuration.showTextBox == true &&
245
+ this.configuration.calculatePointsInsideVolume == true) {
246
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
247
+ if (!options.visibility) {
248
+ data.handles.textBox = {
249
+ hasMoved: false,
250
+ worldPosition: [0, 0, 0],
251
+ worldBoundingBox: {
252
+ topLeft: [0, 0, 0],
253
+ topRight: [0, 0, 0],
254
+ bottomLeft: [0, 0, 0],
255
+ bottomRight: [0, 0, 0],
256
+ },
257
+ };
258
+ continue;
259
+ }
260
+ const textLines = this.configuration.getTextLines(data);
261
+ if (!textLines || textLines.length === 0) {
262
+ continue;
263
+ }
264
+ let canvasTextBoxCoords;
265
+ if (!data.handles.textBox.hasMoved) {
266
+ canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCorners);
267
+ data.handles.textBox.worldPosition =
268
+ viewport.canvasToWorld(canvasTextBoxCoords);
269
+ }
270
+ const textBoxPosition = viewport.worldToCanvas(data.handles.textBox.worldPosition);
271
+ const textBoxUID = '1';
272
+ const boundingBox = drawLinkedTextBoxSvg(svgDrawingHelper, annotationUID, textBoxUID, textLines, textBoxPosition, canvasCoordinates, {}, options);
273
+ const { x: left, y: top, width, height } = boundingBox;
274
+ data.handles.textBox.worldBoundingBox = {
275
+ topLeft: viewport.canvasToWorld([left, top]),
276
+ topRight: viewport.canvasToWorld([left + width, top]),
277
+ bottomLeft: viewport.canvasToWorld([left, top + height]),
278
+ bottomRight: viewport.canvasToWorld([left + width, top + height]),
279
+ };
280
+ }
206
281
  }
207
282
  return renderStatus;
208
283
  };
@@ -212,22 +287,37 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
212
287
  const { data, metadata } = annotation;
213
288
  const { viewPlaneNormal, spacingInNormal } = metadata;
214
289
  const { imageData } = imageVolume;
215
- const { startSlice, endSlice } = data;
290
+ const { startCoordinate, endCoordinate } = data;
216
291
  const { points } = data.handles;
217
292
  const startIJK = transformWorldToIndex(imageData, points[0]);
218
- startIJK[2] = startSlice;
219
- if (startIJK[2] !== startSlice) {
220
- throw new Error('Start slice does not match');
221
- }
222
- const endIJK = vec3.fromValues(startIJK[0], startIJK[1], endSlice);
293
+ const endIJK = transformWorldToIndex(imageData, points[0]);
294
+ const handlesToStart = cloneDeep(points);
223
295
  const startWorld = vec3.create();
224
296
  imageData.indexToWorldVec3(startIJK, startWorld);
225
297
  const endWorld = vec3.create();
226
298
  imageData.indexToWorldVec3(endIJK, endWorld);
299
+ if (this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) == 2) {
300
+ startWorld[2] = startCoordinate;
301
+ endWorld[2] = endCoordinate;
302
+ handlesToStart[0][2] = startCoordinate;
303
+ handlesToStart[1][2] = startCoordinate;
304
+ }
305
+ else if (this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) == 0) {
306
+ startWorld[0] = startCoordinate;
307
+ endWorld[0] = endCoordinate;
308
+ handlesToStart[0][0] = startCoordinate;
309
+ handlesToStart[1][0] = startCoordinate;
310
+ }
311
+ else if (this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) == 1) {
312
+ startWorld[1] = startCoordinate;
313
+ endWorld[1] = endCoordinate;
314
+ handlesToStart[0][1] = startCoordinate;
315
+ handlesToStart[1][1] = startCoordinate;
316
+ }
227
317
  const distance = vec3.distance(startWorld, endWorld);
228
318
  const newProjectionPoints = [];
229
319
  for (let dist = 0; dist < distance; dist += spacingInNormal) {
230
- newProjectionPoints.push(points.map((point) => {
320
+ newProjectionPoints.push(handlesToStart.map((point) => {
231
321
  const newPoint = vec3.create();
232
322
  vec3.scaleAndAdd(newPoint, point, viewPlaneNormal, dist);
233
323
  return Array.from(newPoint);
@@ -235,11 +325,28 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
235
325
  }
236
326
  data.cachedStats.projectionPoints = newProjectionPoints;
237
327
  }
238
- _computePointsInsideVolume(annotation, imageVolume, enabledElement) {
239
- const { data } = annotation;
240
- const { viewport } = enabledElement;
328
+ _computePointsInsideVolume(annotation, imageVolume, targetId, enabledElement) {
329
+ const { data, metadata } = annotation;
330
+ const { viewPlaneNormal, viewUp } = metadata;
331
+ const { viewport, renderingEngine } = enabledElement;
241
332
  const projectionPoints = data.cachedStats.projectionPoints;
242
333
  const pointsInsideVolume = [[]];
334
+ const image = this.getTargetIdImage(targetId, renderingEngine);
335
+ const canvasCoordinates = data.handles.points.map((p) => viewport.worldToCanvas(p));
336
+ const [topLeftCanvas, bottomRightCanvas] = (getCanvasCircleCorners(canvasCoordinates));
337
+ const pos1 = viewport.canvasToWorld(topLeftCanvas);
338
+ const pos2 = viewport.canvasToWorld(bottomRightCanvas);
339
+ const { worldWidth, worldHeight } = getWorldWidthAndHeightFromTwoPoints(viewPlaneNormal, viewUp, pos1, pos2);
340
+ const measureInfo = getCalibratedLengthUnitsAndScale(image, data.handles);
341
+ const aspect = getCalibratedAspect(image);
342
+ const area = Math.abs(Math.PI *
343
+ (worldWidth / measureInfo.scale / 2) *
344
+ (worldHeight / aspect / measureInfo.scale / 2));
345
+ const modalityUnitOptions = {
346
+ isPreScaled: isViewportPreScaled(viewport, targetId),
347
+ isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
348
+ };
349
+ const pixelValueUnits = getPixelValueUnits(metadata.Modality, annotation.metadata.referencedImageId, modalityUnitOptions);
243
350
  for (let i = 0; i < projectionPoints.length; i++) {
244
351
  if (!imageVolume) {
245
352
  continue;
@@ -251,16 +358,21 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
251
358
  const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
252
359
  const worldPos1 = topLeftWorld;
253
360
  const worldPos2 = bottomRightWorld;
254
- const { dimensions, imageData } = imageVolume;
361
+ const { dimensions, imageData, voxelManager } = imageVolume;
255
362
  const worldPos1Index = transformWorldToIndex(imageData, worldPos1);
256
- const worldCenterIndex = transformWorldToIndex(imageData, centerWorld);
363
+ const worldProjectionPointIndex = transformWorldToIndex(imageData, centerWorld);
364
+ const indexOfProjection = this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal);
257
365
  worldPos1Index[0] = Math.floor(worldPos1Index[0]);
258
366
  worldPos1Index[1] = Math.floor(worldPos1Index[1]);
259
- worldPos1Index[2] = Math.floor(worldCenterIndex[2]);
367
+ worldPos1Index[2] = Math.floor(worldPos1Index[2]);
368
+ worldPos1Index[indexOfProjection] =
369
+ worldProjectionPointIndex[indexOfProjection];
260
370
  const worldPos2Index = transformWorldToIndex(imageData, worldPos2);
261
371
  worldPos2Index[0] = Math.floor(worldPos2Index[0]);
262
372
  worldPos2Index[1] = Math.floor(worldPos2Index[1]);
263
- worldPos2Index[2] = Math.floor(worldCenterIndex[2]);
373
+ worldPos2Index[2] = Math.floor(worldPos2Index[2]);
374
+ worldPos2Index[indexOfProjection] =
375
+ worldProjectionPointIndex[indexOfProjection];
264
376
  if (this._isInsideVolume(worldPos1Index, worldPos2Index, dimensions)) {
265
377
  const iMin = Math.min(worldPos1Index[0], worldPos2Index[0]);
266
378
  const iMax = Math.max(worldPos1Index[0], worldPos2Index[0]);
@@ -280,61 +392,81 @@ class CircleROIStartEndThresholdTool extends CircleROITool {
280
392
  yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
281
393
  zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
282
394
  };
283
- const pointsInShape = pointInShapeCallback(imageData, (pointLPS) => pointInEllipse(ellipseObj, pointLPS), null, boundsIJK);
395
+ const pointsInShape = voxelManager.forEach(this.configuration.statsCalculator.statsCallback, {
396
+ isInObject: (pointLPS) => pointInEllipse(ellipseObj, pointLPS),
397
+ boundsIJK,
398
+ imageData,
399
+ returnPoints: this.configuration.storePointData,
400
+ });
284
401
  pointsInsideVolume.push(pointsInShape);
285
402
  }
286
403
  }
404
+ const stats = this.configuration.statsCalculator.getStatistics();
287
405
  data.cachedStats.pointsInVolume = pointsInsideVolume;
406
+ data.cachedStats.statistics = {
407
+ Modality: metadata.Modality,
408
+ area,
409
+ mean: stats.mean?.value,
410
+ stdDev: stats.stdDev?.value,
411
+ max: stats.max?.value,
412
+ statsArray: stats.array,
413
+ areaUnits: measureInfo.areaUnits,
414
+ pixelValueUnits,
415
+ };
288
416
  }
289
417
  _calculateCachedStatsTool(annotation, enabledElement) {
290
418
  const data = annotation.data;
291
- const { viewportId, renderingEngineId, viewport } = enabledElement;
419
+ const { viewport } = enabledElement;
292
420
  const { cachedStats } = data;
293
421
  const targetId = this.getTargetId(viewport);
294
422
  const imageVolume = cache.getVolume(targetId.split(/volumeId:|\?/)[1]);
295
423
  this._computeProjectionPoints(annotation, imageVolume);
296
424
  annotation.invalidated = false;
297
- const eventType = Events.ANNOTATION_MODIFIED;
298
- const eventDetail = {
299
- annotation,
300
- viewportId,
301
- renderingEngineId,
302
- };
303
- triggerEvent(eventTarget, eventType, eventDetail);
425
+ triggerAnnotationModified(annotation, viewport.element);
304
426
  return cachedStats;
305
427
  }
306
- _getStartSliceIndex(imageVolume, worldPos, spacingInNormal, viewPlaneNormal) {
428
+ _getStartCoordinate(worldPos, spacingInNormal, viewPlaneNormal) {
307
429
  const numSlicesToPropagate = this.configuration.numSlicesToPropagate;
308
430
  const numSlicesToPropagateFromStart = Math.round(numSlicesToPropagate / 2);
309
431
  const startPos = vec3.create();
310
432
  vec3.scaleAndAdd(startPos, worldPos, viewPlaneNormal, numSlicesToPropagateFromStart * -spacingInNormal);
311
- const imageIdIndex = this._getImageIdIndex(imageVolume, startPos, spacingInNormal, viewPlaneNormal);
312
- return imageIdIndex;
433
+ const startCoord = this._getCoordinateForViewplaneNormal(startPos, viewPlaneNormal);
434
+ return startCoord;
313
435
  }
314
- _getEndSliceIndex(imageVolume, worldPos, spacingInNormal, viewPlaneNormal) {
436
+ _getEndCoordinate(worldPos, spacingInNormal, viewPlaneNormal) {
315
437
  const numSlicesToPropagate = this.configuration.numSlicesToPropagate;
316
- const numSlicesToPropagateFromStart = Math.round(numSlicesToPropagate / 2);
438
+ const numSlicesToPropagateToEnd = numSlicesToPropagate - Math.round(numSlicesToPropagate / 2);
317
439
  const endPos = vec3.create();
318
- vec3.scaleAndAdd(endPos, worldPos, viewPlaneNormal, numSlicesToPropagateFromStart * spacingInNormal);
319
- const imageIdIndex = this._getImageIdIndex(imageVolume, endPos, spacingInNormal, viewPlaneNormal);
320
- return imageIdIndex;
440
+ vec3.scaleAndAdd(endPos, worldPos, viewPlaneNormal, numSlicesToPropagateToEnd * spacingInNormal);
441
+ const endCoord = this._getCoordinateForViewplaneNormal(endPos, viewPlaneNormal);
442
+ return endCoord;
321
443
  }
322
- _getImageIdIndex(imageVolume, pos, spacingInNormal, viewPlaneNormal) {
323
- const halfSpacingInNormalDirection = spacingInNormal / 2;
324
- const { imageIds } = imageVolume;
325
- let imageIdIndex;
326
- for (let i = 0; i < imageIds.length; i++) {
327
- const imageId = imageIds[i];
328
- const { imagePositionPatient } = metaData.get('imagePlaneModule', imageId);
329
- const dir = vec3.create();
330
- vec3.sub(dir, pos, imagePositionPatient);
331
- const dot = vec3.dot(dir, viewPlaneNormal);
332
- if (Math.abs(dot) < halfSpacingInNormalDirection) {
333
- imageIdIndex = i;
334
- }
335
- }
336
- return imageIdIndex;
444
+ _getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) {
445
+ const viewplaneNormalAbs = [
446
+ Math.abs(viewPlaneNormal[0]),
447
+ Math.abs(viewPlaneNormal[1]),
448
+ Math.abs(viewPlaneNormal[2]),
449
+ ];
450
+ const indexOfDirection = viewplaneNormalAbs.indexOf(Math.max(...viewplaneNormalAbs));
451
+ return indexOfDirection;
452
+ }
453
+ _getCoordinateForViewplaneNormal(pos, viewPlaneNormal) {
454
+ const indexOfDirection = this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal);
455
+ return pos[indexOfDirection];
456
+ }
457
+ }
458
+ function defaultGetTextLines(data) {
459
+ const cachedVolumeStats = data.cachedStats.statistics;
460
+ const { area, mean, max, stdDev, areaUnits, pixelValueUnits } = cachedVolumeStats;
461
+ if (mean === undefined) {
462
+ return;
337
463
  }
464
+ const textLines = [];
465
+ textLines.push(`Area: ${roundNumber(area)} ${areaUnits}`);
466
+ textLines.push(`Mean: ${roundNumber(mean)} ${pixelValueUnits}`);
467
+ textLines.push(`Max: ${roundNumber(max)} ${pixelValueUnits}`);
468
+ textLines.push(`Std Dev: ${roundNumber(stdDev)} ${pixelValueUnits}`);
469
+ return textLines;
338
470
  }
339
471
  CircleROIStartEndThresholdTool.toolName = 'CircleROIStartEndThreshold';
340
472
  export default CircleROIStartEndThresholdTool;
@@ -1,14 +1,14 @@
1
1
  import type { Types } from '@cornerstonejs/core';
2
2
  import { BaseTool } from '../base';
3
- import { PublicToolProps, ToolProps, EventTypes, SVGDrawingHelper } from '../../types';
3
+ import type { PublicToolProps, ToolProps, EventTypes, SVGDrawingHelper, Annotation } from '../../types';
4
4
  declare class CircleScissorsTool extends BaseTool {
5
5
  static toolName: any;
6
6
  editData: {
7
- annotation: any;
7
+ annotation: Annotation;
8
8
  segmentIndex: number;
9
+ segmentationId: string;
9
10
  volumeId: string;
10
11
  referencedVolumeId: string;
11
- imageId: string;
12
12
  segmentsLocked: number[];
13
13
  segmentColor: [number, number, number, number];
14
14
  viewportIdsToRender: string[];
@@ -35,13 +35,13 @@ class CircleScissorsTool extends BaseTool {
35
35
  this.isDrawing = true;
36
36
  const camera = viewport.getCamera();
37
37
  const { viewPlaneNormal, viewUp } = camera;
38
- const activeSegmentationRepresentation = activeSegmentation.getActiveRepresentation(viewport.id);
38
+ const activeSegmentationRepresentation = activeSegmentation.getActiveSegmentationRepresentation(viewport.id);
39
39
  if (!activeSegmentationRepresentation) {
40
40
  throw new Error('No active segmentation detected, create one before using scissors tool');
41
41
  }
42
42
  const { segmentationRepresentationUID, segmentationId, type } = activeSegmentationRepresentation;
43
43
  const segmentIndex = segmentIndexController.getActiveSegmentIndex(segmentationId);
44
- const segmentsLocked = segmentLocking.getLockedSegments(segmentationId);
44
+ const segmentsLocked = segmentLocking.getLockedSegmentIndices(segmentationId);
45
45
  const segmentColor = segmentationConfig.color.getSegmentIndexColor(segmentationRepresentationUID, segmentIndex);
46
46
  const { representationData } = getSegmentation(segmentationId);
47
47
  const labelmapData = representationData[type];
@@ -61,7 +61,12 @@ class CircleScissorsTool extends BaseTool {
61
61
  },
62
62
  data: {
63
63
  handles: {
64
- points: [[...worldPos], [...worldPos], [...worldPos], [...worldPos]],
64
+ points: [
65
+ [...worldPos],
66
+ [...worldPos],
67
+ [...worldPos],
68
+ [...worldPos],
69
+ ],
65
70
  activeHandleIndex: null,
66
71
  },
67
72
  isDrawing: true,
@@ -82,6 +87,8 @@ class CircleScissorsTool extends BaseTool {
82
87
  newAnnotation: true,
83
88
  hasMoved: false,
84
89
  segmentationRepresentationUID,
90
+ volumeId: null,
91
+ referencedVolumeId: null,
85
92
  };
86
93
  if (isVolumeSegmentation(labelmapData, viewport)) {
87
94
  const { volumeId } = labelmapData;
@@ -1,5 +1,5 @@
1
1
  import { BaseTool } from '../base';
2
- import { PublicToolProps, ToolProps, EventTypes } from '../../types';
2
+ import type { PublicToolProps, ToolProps, EventTypes } from '../../types';
3
3
  declare class PaintFillTool extends BaseTool {
4
4
  static toolName: any;
5
5
  constructor(toolProps?: PublicToolProps, defaultToolProps?: ToolProps);
@@ -4,7 +4,7 @@ import { SegmentationRepresentations } from '../../enums';
4
4
  import { triggerSegmentationDataModified } from '../../stateManagement/segmentation/triggerSegmentationEvents';
5
5
  import { segmentLocking, activeSegmentation, segmentIndex as segmentIndexController, } from '../../stateManagement/segmentation';
6
6
  import floodFill from '../../utilities/segmentation/floodFill';
7
- import { getLabelmapImageIdsForViewport, getSegmentation, } from '../../stateManagement/segmentation/segmentationState';
7
+ import { getCurrentLabelmapImageIdForViewport, getSegmentation, } from '../../stateManagement/segmentation/segmentationState';
8
8
  import { isVolumeSegmentation } from './strategies/utils/stackVolumeCheck';
9
9
  const { transformWorldToIndex, isEqual } = csUtils;
10
10
  class PaintFillTool extends BaseTool {
@@ -20,36 +20,37 @@ class PaintFillTool extends BaseTool {
20
20
  const { viewport } = enabledElement;
21
21
  const camera = viewport.getCamera();
22
22
  const { viewPlaneNormal } = camera;
23
- const activeSegmentationRepresentation = activeSegmentation.getActiveRepresentation(viewport.id);
23
+ const activeSegmentationRepresentation = activeSegmentation.getActiveSegmentationRepresentation(viewport.id);
24
24
  if (!activeSegmentationRepresentation) {
25
25
  throw new Error('No active segmentation detected, create one before using scissors tool');
26
26
  }
27
- const { segmentationId, type, segmentationRepresentationUID } = activeSegmentationRepresentation;
27
+ const { segmentationId, type } = activeSegmentationRepresentation;
28
28
  const segmentIndex = segmentIndexController.getActiveSegmentIndex(segmentationId);
29
- const segmentsLocked = segmentLocking.getLockedSegments(segmentationId);
29
+ const segmentsLocked = segmentLocking.getLockedSegmentIndices(segmentationId);
30
30
  const { representationData } = getSegmentation(segmentationId);
31
31
  const labelmapData = representationData[SegmentationRepresentations.Labelmap];
32
32
  let dimensions;
33
33
  let direction;
34
34
  let scalarData;
35
35
  let index;
36
+ let voxelManager;
36
37
  if (isVolumeSegmentation(labelmapData, viewport)) {
37
38
  const { volumeId } = representationData[type];
38
39
  const segmentation = cache.getVolume(volumeId);
39
40
  ({ dimensions, direction } = segmentation);
40
- scalarData = segmentation.getScalarData();
41
+ voxelManager = segmentation.voxelManager;
41
42
  index = transformWorldToIndex(segmentation.imageData, worldPos);
42
43
  }
43
44
  else {
44
- const currentSegmentationImageId = getLabelmapImageIdsForViewport(viewport.id, segmentationId);
45
+ const currentSegmentationImageId = getCurrentLabelmapImageIdForViewport(viewport.id, segmentationId);
45
46
  if (!currentSegmentationImageId) {
46
47
  throw new Error('No active segmentation imageId detected, create one before using scissors tool');
47
48
  }
48
- const segmentationImage = cache.getImage(currentSegmentationImageId);
49
- scalarData = segmentationImage.getPixelData();
50
49
  const { imageData } = viewport.getImageData();
51
50
  dimensions = imageData.getDimensions();
52
51
  direction = imageData.getDirection();
52
+ const image = cache.getImage(currentSegmentationImageId);
53
+ voxelManager = image.voxelManager;
53
54
  index = transformWorldToIndex(imageData, worldPos);
54
55
  }
55
56
  const fixedDimension = this.getFixedDimension(viewPlaneNormal, direction);
@@ -57,7 +58,7 @@ class PaintFillTool extends BaseTool {
57
58
  console.warn('Oblique paint fill not yet supported');
58
59
  return;
59
60
  }
60
- const { floodFillGetter, getLabelValue, getScalarDataPositionFromPlane, inPlaneSeedPoint, fixedDimensionValue, } = this.generateHelpers(scalarData, dimensions, index, fixedDimension);
61
+ const { floodFillGetter, getLabelValue, getScalarDataPositionFromPlane, inPlaneSeedPoint, fixedDimensionValue, } = this.generateHelpers(voxelManager, dimensions, index, fixedDimension);
61
62
  if (index[0] < 0 ||
62
63
  index[0] >= dimensions[0] ||
63
64
  index[1] < 0 ||
@@ -73,8 +74,8 @@ class PaintFillTool extends BaseTool {
73
74
  const floodFillResult = floodFill(floodFillGetter, inPlaneSeedPoint);
74
75
  const { flooded } = floodFillResult;
75
76
  flooded.forEach((index) => {
76
- const scalarDataPosition = getScalarDataPositionFromPlane(index[0], index[1]);
77
- scalarData[scalarDataPosition] = segmentIndex;
77
+ const scalarDataIndex = getScalarDataPositionFromPlane(index[0], index[1]);
78
+ voxelManager.setAtIndex(scalarDataIndex, segmentIndex);
78
79
  });
79
80
  const framesModified = this.getFramesModified(fixedDimension, fixedDimensionValue, floodFillResult);
80
81
  triggerSegmentationDataModified(segmentationId, framesModified);
@@ -102,7 +103,7 @@ class PaintFillTool extends BaseTool {
102
103
  }
103
104
  return framesModified;
104
105
  };
105
- this.generateHelpers = (scalarData, dimensions, seedIndex3D, fixedDimension = 2) => {
106
+ this.generateHelpers = (voxelManager, dimensions, seedIndex3D, fixedDimension = 2) => {
106
107
  let fixedDimensionValue;
107
108
  let inPlaneSeedPoint;
108
109
  switch (fixedDimension) {
@@ -122,10 +123,10 @@ class PaintFillTool extends BaseTool {
122
123
  throw new Error(`Invalid fixedDimension: ${fixedDimension}`);
123
124
  }
124
125
  const getScalarDataPosition = (x, y, z) => {
125
- return z * dimensions[1] * dimensions[0] + y * dimensions[0] + x;
126
+ return voxelManager.toIndex([x, y, z]);
126
127
  };
127
128
  const getLabelValue = (x, y, z) => {
128
- return scalarData[getScalarDataPosition(x, y, z)];
129
+ return voxelManager.getAtIJK(x, y, z);
129
130
  };
130
131
  const floodFillGetter = this.generateFloodFillGetter(dimensions, fixedDimension, fixedDimensionValue, getLabelValue);
131
132
  const getScalarDataPositionFromPlane = this.generateGetScalarDataPositionFromPlane(getScalarDataPosition, fixedDimension, fixedDimensionValue);