@cornerstonejs/tools 0.56.2 → 0.56.4

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 (352) hide show
  1. package/package.json +5 -4
  2. package/src/constants/COLOR_LUT.ts +262 -0
  3. package/src/constants/index.ts +3 -0
  4. package/src/cursors/ImageMouseCursor.ts +39 -0
  5. package/src/cursors/MouseCursor.ts +114 -0
  6. package/src/cursors/SVGCursorDescriptor.ts +462 -0
  7. package/src/cursors/SVGMouseCursor.ts +145 -0
  8. package/src/cursors/elementCursor.ts +69 -0
  9. package/src/cursors/index.ts +24 -0
  10. package/src/cursors/setCursorForElement.ts +33 -0
  11. package/src/drawingSvg/_getHash.ts +9 -0
  12. package/src/drawingSvg/_setAttributesIfNecessary.ts +13 -0
  13. package/src/drawingSvg/_setNewAttributesIfValid.ts +10 -0
  14. package/src/drawingSvg/clearByToolType.ts +26 -0
  15. package/src/drawingSvg/draw.ts +16 -0
  16. package/src/drawingSvg/drawArrow.ts +82 -0
  17. package/src/drawingSvg/drawCircle.ts +62 -0
  18. package/src/drawingSvg/drawEllipse.ts +71 -0
  19. package/src/drawingSvg/drawHandles.ts +87 -0
  20. package/src/drawingSvg/drawLine.ts +70 -0
  21. package/src/drawingSvg/drawLink.ts +76 -0
  22. package/src/drawingSvg/drawLinkedTextBox.ts +64 -0
  23. package/src/drawingSvg/drawPolyline.ts +80 -0
  24. package/src/drawingSvg/drawRect.ts +70 -0
  25. package/src/drawingSvg/drawTextBox.ts +213 -0
  26. package/src/drawingSvg/getSvgDrawingHelper.ts +98 -0
  27. package/src/drawingSvg/index.ts +23 -0
  28. package/src/enums/AnnotationStyleStates.ts +22 -0
  29. package/src/enums/Events.ts +242 -0
  30. package/src/enums/SegmentationRepresentations.ts +12 -0
  31. package/src/enums/ToolBindings.ts +37 -0
  32. package/src/enums/ToolModes.ts +31 -0
  33. package/src/enums/Touch.ts +8 -0
  34. package/src/enums/index.js +16 -0
  35. package/src/eventDispatchers/annotationModifiedEventDispatcher.ts +41 -0
  36. package/src/eventDispatchers/cameraModifiedEventDispatcher.ts +41 -0
  37. package/src/eventDispatchers/imageRenderedEventDispatcher.ts +37 -0
  38. package/src/eventDispatchers/imageSpacingCalibratedEventDispatcher.ts +50 -0
  39. package/src/eventDispatchers/index.js +15 -0
  40. package/src/eventDispatchers/keyboardEventHandlers/index.js +4 -0
  41. package/src/eventDispatchers/keyboardEventHandlers/keyDown.ts +29 -0
  42. package/src/eventDispatchers/keyboardEventHandlers/keyUp.ts +33 -0
  43. package/src/eventDispatchers/keyboardToolEventDispatcher.ts +28 -0
  44. package/src/eventDispatchers/mouseEventHandlers/index.js +19 -0
  45. package/src/eventDispatchers/mouseEventHandlers/mouseClick.ts +13 -0
  46. package/src/eventDispatchers/mouseEventHandlers/mouseDoubleClick.ts +13 -0
  47. package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +196 -0
  48. package/src/eventDispatchers/mouseEventHandlers/mouseDownActivate.ts +35 -0
  49. package/src/eventDispatchers/mouseEventHandlers/mouseDrag.ts +25 -0
  50. package/src/eventDispatchers/mouseEventHandlers/mouseMove.ts +70 -0
  51. package/src/eventDispatchers/mouseEventHandlers/mouseUp.ts +9 -0
  52. package/src/eventDispatchers/mouseEventHandlers/mouseWheel.ts +13 -0
  53. package/src/eventDispatchers/mouseToolEventDispatcher.ts +64 -0
  54. package/src/eventDispatchers/shared/customCallbackHandler.ts +73 -0
  55. package/src/eventDispatchers/shared/getActiveToolForKeyboardEvent.ts +58 -0
  56. package/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +61 -0
  57. package/src/eventDispatchers/shared/getActiveToolForTouchEvent.ts +64 -0
  58. package/src/eventDispatchers/shared/getMouseModifier.ts +30 -0
  59. package/src/eventDispatchers/shared/getToolsWithModesForMouseEvent.ts +56 -0
  60. package/src/eventDispatchers/shared/getToolsWithModesForTouchEvent.ts +54 -0
  61. package/src/eventDispatchers/touchEventHandlers/index.js +15 -0
  62. package/src/eventDispatchers/touchEventHandlers/touchDrag.ts +23 -0
  63. package/src/eventDispatchers/touchEventHandlers/touchEnd.ts +9 -0
  64. package/src/eventDispatchers/touchEventHandlers/touchPress.ts +13 -0
  65. package/src/eventDispatchers/touchEventHandlers/touchStart.ts +174 -0
  66. package/src/eventDispatchers/touchEventHandlers/touchStartActivate.ts +36 -0
  67. package/src/eventDispatchers/touchEventHandlers/touchTap.ts +9 -0
  68. package/src/eventDispatchers/touchToolEventDispatcher.ts +51 -0
  69. package/src/eventListeners/annotations/annotationModifiedListener.ts +22 -0
  70. package/src/eventListeners/annotations/annotationSelectionListener.ts +29 -0
  71. package/src/eventListeners/annotations/index.ts +4 -0
  72. package/src/eventListeners/index.ts +28 -0
  73. package/src/eventListeners/keyboard/index.ts +16 -0
  74. package/src/eventListeners/keyboard/keyDownListener.ts +99 -0
  75. package/src/eventListeners/mouse/getMouseEventPoints.ts +66 -0
  76. package/src/eventListeners/mouse/index.ts +55 -0
  77. package/src/eventListeners/mouse/mouseDoubleClickListener.ts +55 -0
  78. package/src/eventListeners/mouse/mouseDownListener.ts +519 -0
  79. package/src/eventListeners/mouse/mouseMoveListener.ts +33 -0
  80. package/src/eventListeners/segmentation/index.ts +11 -0
  81. package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +61 -0
  82. package/src/eventListeners/segmentation/segmentationModifiedEventListener.ts +32 -0
  83. package/src/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.ts +15 -0
  84. package/src/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.ts +16 -0
  85. package/src/eventListeners/touch/getTouchEventPoints.ts +75 -0
  86. package/src/eventListeners/touch/index.ts +37 -0
  87. package/src/eventListeners/touch/preventGhostClick.js +72 -0
  88. package/src/eventListeners/touch/touchStartListener.ts +499 -0
  89. package/src/eventListeners/wheel/index.ts +27 -0
  90. package/src/eventListeners/wheel/normalizeWheel.ts +69 -0
  91. package/src/eventListeners/wheel/wheelListener.ts +51 -0
  92. package/src/index.ts +133 -0
  93. package/src/init.ts +187 -0
  94. package/src/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.ts +399 -0
  95. package/src/stateManagement/annotation/annotationLocking.ts +178 -0
  96. package/src/stateManagement/annotation/annotationSelection.ts +163 -0
  97. package/src/stateManagement/annotation/annotationState.ts +180 -0
  98. package/src/stateManagement/annotation/annotationVisibility.ts +156 -0
  99. package/src/stateManagement/annotation/config/ToolStyle.ts +265 -0
  100. package/src/stateManagement/annotation/config/getFont.ts +36 -0
  101. package/src/stateManagement/annotation/config/getState.ts +26 -0
  102. package/src/stateManagement/annotation/config/helpers.ts +55 -0
  103. package/src/stateManagement/annotation/config/index.ts +5 -0
  104. package/src/stateManagement/annotation/helpers/state.ts +83 -0
  105. package/src/stateManagement/annotation/index.ts +15 -0
  106. package/src/stateManagement/index.js +40 -0
  107. package/src/stateManagement/segmentation/SegmentationStateManager.ts +491 -0
  108. package/src/stateManagement/segmentation/activeSegmentation.ts +60 -0
  109. package/src/stateManagement/segmentation/addSegmentationRepresentations.ts +77 -0
  110. package/src/stateManagement/segmentation/addSegmentations.ts +27 -0
  111. package/src/stateManagement/segmentation/config/index.ts +29 -0
  112. package/src/stateManagement/segmentation/config/segmentationColor.ts +132 -0
  113. package/src/stateManagement/segmentation/config/segmentationConfig.ts +195 -0
  114. package/src/stateManagement/segmentation/config/segmentationVisibility.ts +171 -0
  115. package/src/stateManagement/segmentation/helpers/index.ts +3 -0
  116. package/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +35 -0
  117. package/src/stateManagement/segmentation/helpers/validateSegmentationInput.ts +41 -0
  118. package/src/stateManagement/segmentation/index.ts +22 -0
  119. package/src/stateManagement/segmentation/removeSegmentationsFromToolGroup.ts +85 -0
  120. package/src/stateManagement/segmentation/segmentIndex.ts +38 -0
  121. package/src/stateManagement/segmentation/segmentLocking.ts +72 -0
  122. package/src/stateManagement/segmentation/segmentationState.ts +429 -0
  123. package/src/stateManagement/segmentation/triggerSegmentationEvents.ts +157 -0
  124. package/src/store/SynchronizerManager/Synchronizer.ts +344 -0
  125. package/src/store/SynchronizerManager/createSynchronizer.ts +41 -0
  126. package/src/store/SynchronizerManager/destroy.ts +14 -0
  127. package/src/store/SynchronizerManager/destroySynchronizer.ts +25 -0
  128. package/src/store/SynchronizerManager/getAllSynchronizers.ts +12 -0
  129. package/src/store/SynchronizerManager/getSynchronizer.ts +13 -0
  130. package/src/store/SynchronizerManager/getSynchronizersForViewport.ts +44 -0
  131. package/src/store/SynchronizerManager/index.js +15 -0
  132. package/src/store/ToolGroupManager/ToolGroup.ts +679 -0
  133. package/src/store/ToolGroupManager/createToolGroup.ts +33 -0
  134. package/src/store/ToolGroupManager/destroy.ts +24 -0
  135. package/src/store/ToolGroupManager/destroyToolGroup.ts +26 -0
  136. package/src/store/ToolGroupManager/getAllToolGroups.ts +12 -0
  137. package/src/store/ToolGroupManager/getToolGroup.ts +14 -0
  138. package/src/store/ToolGroupManager/getToolGroupForViewport.ts +44 -0
  139. package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +33 -0
  140. package/src/store/ToolGroupManager/index.ts +17 -0
  141. package/src/store/addEnabledElement.ts +137 -0
  142. package/src/store/addTool.ts +56 -0
  143. package/src/store/cancelActiveManipulations.ts +30 -0
  144. package/src/store/filterMoveableAnnotationTools.ts +61 -0
  145. package/src/store/filterToolsWithAnnotationsForElement.ts +51 -0
  146. package/src/store/filterToolsWithMoveableHandles.ts +51 -0
  147. package/src/store/index.ts +29 -0
  148. package/src/store/removeEnabledElement.ts +132 -0
  149. package/src/store/state.ts +57 -0
  150. package/src/store/svgNodeCache.ts +7 -0
  151. package/src/synchronizers/callbacks/areViewportsCoplanar .ts +12 -0
  152. package/src/synchronizers/callbacks/cameraSyncCallback.ts +33 -0
  153. package/src/synchronizers/callbacks/stackImageSyncCallback.ts +157 -0
  154. package/src/synchronizers/callbacks/voiSyncCallback.ts +51 -0
  155. package/src/synchronizers/callbacks/zoomPanSyncCallback.ts +43 -0
  156. package/src/synchronizers/index.ts +11 -0
  157. package/src/synchronizers/synchronizers/createCameraPositionSynchronizer.ts +25 -0
  158. package/src/synchronizers/synchronizers/createStackImageSynchronizer.ts +25 -0
  159. package/src/synchronizers/synchronizers/createVOISynchronizer.ts +24 -0
  160. package/src/synchronizers/synchronizers/createZoomPanSynchronizer.ts +25 -0
  161. package/src/synchronizers/synchronizers/index.ts +11 -0
  162. package/src/tools/CrosshairsTool.ts +2693 -0
  163. package/src/tools/MIPJumpToClickTool.ts +99 -0
  164. package/src/tools/MagnifyTool.ts +319 -0
  165. package/src/tools/PanTool.ts +58 -0
  166. package/src/tools/PlanarRotateTool.ts +77 -0
  167. package/src/tools/ReferenceCursors.ts +466 -0
  168. package/src/tools/ReferenceLinesTool.ts +279 -0
  169. package/src/tools/ScaleOverlayTool.ts +685 -0
  170. package/src/tools/StackScrollTool.ts +97 -0
  171. package/src/tools/StackScrollToolMouseWheelTool.ts +58 -0
  172. package/src/tools/TrackballRotateTool.ts +141 -0
  173. package/src/tools/VolumeRotateMouseWheelTool.ts +86 -0
  174. package/src/tools/WindowLevelTool.ts +260 -0
  175. package/src/tools/ZoomTool.ts +293 -0
  176. package/src/tools/annotation/AngleTool.ts +835 -0
  177. package/src/tools/annotation/ArrowAnnotateTool.ts +820 -0
  178. package/src/tools/annotation/BidirectionalTool.ts +1350 -0
  179. package/src/tools/annotation/CircleROITool.ts +1070 -0
  180. package/src/tools/annotation/CobbAngleTool.ts +815 -0
  181. package/src/tools/annotation/DragProbeTool.ts +213 -0
  182. package/src/tools/annotation/EllipticalROITool.ts +1223 -0
  183. package/src/tools/annotation/LengthTool.ts +861 -0
  184. package/src/tools/annotation/PlanarFreehandROITool.ts +636 -0
  185. package/src/tools/annotation/ProbeTool.ts +681 -0
  186. package/src/tools/annotation/RectangleROITool.ts +1028 -0
  187. package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +488 -0
  188. package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +462 -0
  189. package/src/tools/annotation/planarFreehandROITool/editLoopCommon.ts +331 -0
  190. package/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +74 -0
  191. package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +612 -0
  192. package/src/tools/annotation/planarFreehandROITool/openContourEndEditLoop.ts +74 -0
  193. package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +407 -0
  194. package/src/tools/base/AnnotationDisplayTool.ts +228 -0
  195. package/src/tools/base/AnnotationTool.ts +307 -0
  196. package/src/tools/base/BaseTool.ts +215 -0
  197. package/src/tools/base/index.ts +4 -0
  198. package/src/tools/displayTools/Contour/addContourToElement.ts +135 -0
  199. package/src/tools/displayTools/Contour/contourDisplay.ts +252 -0
  200. package/src/tools/displayTools/Contour/index.ts +3 -0
  201. package/src/tools/displayTools/Contour/removeContourFromElement.ts +35 -0
  202. package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +57 -0
  203. package/src/tools/displayTools/Labelmap/index.ts +4 -0
  204. package/src/tools/displayTools/Labelmap/labelmapConfig.ts +37 -0
  205. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +461 -0
  206. package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +27 -0
  207. package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +30 -0
  208. package/src/tools/displayTools/SegmentationDisplayTool.ts +198 -0
  209. package/src/tools/index.ts +84 -0
  210. package/src/tools/segmentation/BrushTool.ts +474 -0
  211. package/src/tools/segmentation/CircleScissorsTool.ts +365 -0
  212. package/src/tools/segmentation/PaintFillTool.ts +370 -0
  213. package/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts +471 -0
  214. package/src/tools/segmentation/RectangleROIThresholdTool.ts +281 -0
  215. package/src/tools/segmentation/RectangleScissorsTool.ts +382 -0
  216. package/src/tools/segmentation/SphereScissorsTool.ts +368 -0
  217. package/src/tools/segmentation/strategies/eraseCircle.ts +30 -0
  218. package/src/tools/segmentation/strategies/eraseRectangle.ts +81 -0
  219. package/src/tools/segmentation/strategies/eraseSphere.ts +27 -0
  220. package/src/tools/segmentation/strategies/fillCircle.ts +185 -0
  221. package/src/tools/segmentation/strategies/fillRectangle.ts +110 -0
  222. package/src/tools/segmentation/strategies/fillSphere.ts +88 -0
  223. package/src/tools/segmentation/strategies/index.ts +9 -0
  224. package/src/types/AnnotationGroupSelector.ts +7 -0
  225. package/src/types/AnnotationStyle.ts +42 -0
  226. package/src/types/AnnotationTypes.ts +109 -0
  227. package/src/types/BoundsIJK.ts +5 -0
  228. package/src/types/CINETypes.ts +32 -0
  229. package/src/types/ContourTypes.ts +26 -0
  230. package/src/types/CursorTypes.ts +12 -0
  231. package/src/types/EventTypes.ts +657 -0
  232. package/src/types/FloodFillTypes.ts +19 -0
  233. package/src/types/IAnnotationManager.ts +89 -0
  234. package/src/types/IDistance.ts +16 -0
  235. package/src/types/IPoints.ts +18 -0
  236. package/src/types/ISetToolModeOptions.ts +29 -0
  237. package/src/types/ISynchronizerEventHandler.ts +11 -0
  238. package/src/types/IToolClassReference.ts +5 -0
  239. package/src/types/IToolGroup.ts +72 -0
  240. package/src/types/ITouchPoints.ts +14 -0
  241. package/src/types/InteractionTypes.ts +6 -0
  242. package/src/types/InternalToolTypes.ts +19 -0
  243. package/src/types/JumpToSliceOptions.ts +7 -0
  244. package/src/types/LabelmapTypes.ts +41 -0
  245. package/src/types/PlanarBoundingBox.ts +8 -0
  246. package/src/types/SVGDrawingHelper.ts +10 -0
  247. package/src/types/ScrollOptions.ts +9 -0
  248. package/src/types/SegmentationStateTypes.ts +248 -0
  249. package/src/types/ToolHandle.ts +26 -0
  250. package/src/types/ToolProps.ts +16 -0
  251. package/src/types/ToolSpecificAnnotationTypes.ts +311 -0
  252. package/src/types/index.ts +115 -0
  253. package/src/utilities/boundingBox/extend2DBoundingBoxInViewAxis.ts +29 -0
  254. package/src/utilities/boundingBox/getBoundingBoxAroundShape.ts +57 -0
  255. package/src/utilities/boundingBox/index.ts +4 -0
  256. package/src/utilities/calibrateImageSpacing.ts +46 -0
  257. package/src/utilities/cine/events.ts +9 -0
  258. package/src/utilities/cine/index.ts +5 -0
  259. package/src/utilities/cine/playClip.ts +435 -0
  260. package/src/utilities/cine/state.ts +18 -0
  261. package/src/utilities/clip.js +30 -0
  262. package/src/utilities/debounce.js +217 -0
  263. package/src/utilities/drawing/getTextBoxCoordsCanvas.ts +45 -0
  264. package/src/utilities/drawing/index.ts +3 -0
  265. package/src/utilities/dynamicVolume/getDataInTime.ts +110 -0
  266. package/src/utilities/dynamicVolume/index.ts +2 -0
  267. package/src/utilities/getAnnotationNearPoint.ts +130 -0
  268. package/src/utilities/getModalityUnit.ts +11 -0
  269. package/src/utilities/getToolsWithModesForElement.ts +52 -0
  270. package/src/utilities/index.ts +68 -0
  271. package/src/utilities/isObject.js +29 -0
  272. package/src/utilities/math/angle/angleBetweenLines.ts +29 -0
  273. package/src/utilities/math/circle/_types.ts +6 -0
  274. package/src/utilities/math/circle/getCanvasCircleCorners.ts +23 -0
  275. package/src/utilities/math/circle/getCanvasCircleRadius.ts +16 -0
  276. package/src/utilities/math/circle/index.ts +4 -0
  277. package/src/utilities/math/ellipse/getCanvasEllipseCorners.ts +26 -0
  278. package/src/utilities/math/ellipse/index.ts +4 -0
  279. package/src/utilities/math/ellipse/pointInEllipse.ts +38 -0
  280. package/src/utilities/math/ellipse/pointInEllipsoidWithConstraint.ts +35 -0
  281. package/src/utilities/math/index.ts +8 -0
  282. package/src/utilities/math/line/distanceToPoint.ts +24 -0
  283. package/src/utilities/math/line/distanceToPointSquared.ts +44 -0
  284. package/src/utilities/math/line/index.ts +5 -0
  285. package/src/utilities/math/line/intersectLine.ts +92 -0
  286. package/src/utilities/math/midPoint.ts +24 -0
  287. package/src/utilities/math/point/distanceToPoint.ts +22 -0
  288. package/src/utilities/math/point/index.ts +3 -0
  289. package/src/utilities/math/polyline/addCanvasPointsToArray.ts +62 -0
  290. package/src/utilities/math/polyline/calculateAreaOfPoints.ts +23 -0
  291. package/src/utilities/math/polyline/getIntersectionWithPolyline.ts +182 -0
  292. package/src/utilities/math/polyline/getSubPixelSpacingAndXYDirections.ts +99 -0
  293. package/src/utilities/math/polyline/index.ts +19 -0
  294. package/src/utilities/math/polyline/planarFreehandROIInternalTypes.ts +36 -0
  295. package/src/utilities/math/polyline/pointCanProjectOnLine.ts +57 -0
  296. package/src/utilities/math/polyline/pointsAreWithinCloseContourProximity.ts +15 -0
  297. package/src/utilities/math/rectangle/distanceToPoint.ts +82 -0
  298. package/src/utilities/math/rectangle/index.ts +3 -0
  299. package/src/utilities/math/sphere/index.ts +3 -0
  300. package/src/utilities/math/sphere/pointInSphere.ts +31 -0
  301. package/src/utilities/math/vec2/findClosestPoint.ts +40 -0
  302. package/src/utilities/math/vec2/index.ts +4 -0
  303. package/src/utilities/math/vec2/liangBarksyClip.ts +84 -0
  304. package/src/utilities/orientation/getOrientationStringLPS.ts +52 -0
  305. package/src/utilities/orientation/index.ts +4 -0
  306. package/src/utilities/orientation/invertOrientationStringLPS.ts +21 -0
  307. package/src/utilities/planar/filterAnnotationsForDisplay.ts +68 -0
  308. package/src/utilities/planar/filterAnnotationsWithinSlice.ts +85 -0
  309. package/src/utilities/planar/getPointInLineOfSightWithCriteria.ts +104 -0
  310. package/src/utilities/planar/getWorldWidthAndHeightFromCorners.ts +51 -0
  311. package/src/utilities/planar/getWorldWidthAndHeightFromTwoPoints.ts +51 -0
  312. package/src/utilities/planar/index.ts +18 -0
  313. package/src/utilities/planarFreehandROITool/index.ts +7 -0
  314. package/src/utilities/planarFreehandROITool/interpolateAnnotation.ts +87 -0
  315. package/src/utilities/planarFreehandROITool/interpolatePoints.ts +214 -0
  316. package/src/utilities/planarFreehandROITool/interpolation/algorithms/bspline.ts +55 -0
  317. package/src/utilities/planarFreehandROITool/interpolation/interpolateSegmentPoints.ts +90 -0
  318. package/src/utilities/pointInShapeCallback.ts +138 -0
  319. package/src/utilities/pointInSurroundingSphereCallback.ts +188 -0
  320. package/src/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.ts +76 -0
  321. package/src/utilities/rectangleROITool/index.ts +3 -0
  322. package/src/utilities/scroll.ts +62 -0
  323. package/src/utilities/segmentation/brushSizeForToolGroup.ts +72 -0
  324. package/src/utilities/segmentation/brushThresholdForToolGroup.ts +65 -0
  325. package/src/utilities/segmentation/createLabelmapVolumeForViewport.ts +74 -0
  326. package/src/utilities/segmentation/createMergedLabelmapForIndex.ts +65 -0
  327. package/src/utilities/segmentation/floodFill.ts +194 -0
  328. package/src/utilities/segmentation/getDefaultRepresentationConfig.ts +20 -0
  329. package/src/utilities/segmentation/index.ts +33 -0
  330. package/src/utilities/segmentation/isValidRepresentationConfig.ts +22 -0
  331. package/src/utilities/segmentation/rectangleROIThresholdVolumeByRange.ts +91 -0
  332. package/src/utilities/segmentation/thresholdSegmentationByRange.ts +129 -0
  333. package/src/utilities/segmentation/thresholdVolumeByRange.ts +150 -0
  334. package/src/utilities/segmentation/triggerSegmentationRender.ts +206 -0
  335. package/src/utilities/segmentation/utilities.ts +116 -0
  336. package/src/utilities/stackPrefetch/index.ts +8 -0
  337. package/src/utilities/stackPrefetch/stackPrefetch.ts +405 -0
  338. package/src/utilities/stackPrefetch/state.ts +17 -0
  339. package/src/utilities/throttle.js +69 -0
  340. package/src/utilities/touch/index.ts +246 -0
  341. package/src/utilities/triggerAnnotationRender.ts +237 -0
  342. package/src/utilities/triggerAnnotationRenderForViewportIds.ts +18 -0
  343. package/src/utilities/viewport/index.ts +5 -0
  344. package/src/utilities/viewport/isViewportPreScaled.ts +24 -0
  345. package/src/utilities/viewport/jumpToSlice.ts +73 -0
  346. package/src/utilities/viewport/jumpToWorld.ts +58 -0
  347. package/src/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.ts +28 -0
  348. package/src/utilities/viewportFilters/filterViewportsWithParallelNormals.ts +26 -0
  349. package/src/utilities/viewportFilters/filterViewportsWithSameOrientation.ts +15 -0
  350. package/src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts +72 -0
  351. package/src/utilities/viewportFilters/getViewportIdsWithToolToRender.ts +45 -0
  352. package/src/utilities/viewportFilters/index.ts +11 -0
@@ -0,0 +1,491 @@
1
+ import cloneDeep from 'lodash.clonedeep';
2
+ import { utilities as csUtils } from '@cornerstonejs/core';
3
+
4
+ import CORNERSTONE_COLOR_LUT from '../../constants/COLOR_LUT';
5
+
6
+ import type {
7
+ SegmentationState,
8
+ ColorLUT,
9
+ Segmentation,
10
+ ToolGroupSpecificRepresentation,
11
+ SegmentationRepresentationConfig,
12
+ ToolGroupSpecificRepresentations,
13
+ RepresentationConfig,
14
+ SegmentSpecificRepresentationConfig,
15
+ } from '../../types/SegmentationStateTypes';
16
+ import getDefaultLabelmapConfig from '../../tools/displayTools/Labelmap/labelmapConfig';
17
+ import { SegmentationRepresentations } from '../../enums';
18
+
19
+ // Initialize the default configuration
20
+ // Note: when we get other representations, we should set their default representations too.
21
+ const defaultLabelmapConfig = getDefaultLabelmapConfig();
22
+
23
+ const newGlobalConfig: SegmentationRepresentationConfig = {
24
+ renderInactiveSegmentations: true,
25
+ representations: {
26
+ [SegmentationRepresentations.Labelmap]: defaultLabelmapConfig,
27
+ },
28
+ };
29
+
30
+ /* A default initial state for the segmentation manager. */
31
+ const initialDefaultState: SegmentationState = {
32
+ colorLUT: [],
33
+ segmentations: [],
34
+ globalConfig: newGlobalConfig,
35
+ toolGroups: {},
36
+ };
37
+
38
+ /**
39
+ * The SegmentationStateManager Class is responsible for managing the state of the
40
+ * segmentations. It stores the segmentations and toolGroup specific representations
41
+ * of the segmentation. It also stores a global config and a toolGroup specific
42
+ * config. Note that this is a singleton state manager.
43
+ */
44
+ export default class SegmentationStateManager {
45
+ private state: SegmentationState;
46
+ public readonly uid: string;
47
+
48
+ constructor(uid?: string) {
49
+ if (!uid) {
50
+ uid = csUtils.uuidv4();
51
+ }
52
+ this.state = cloneDeep(initialDefaultState);
53
+ this.uid = uid;
54
+ }
55
+
56
+ /**
57
+ * It returns a copy of the current state of the segmentation
58
+ * @returns A deep copy of the state.
59
+ */
60
+ getState(): SegmentationState {
61
+ return this.state;
62
+ }
63
+
64
+ /**
65
+ * It returns an array of toolGroupIds currently in the segmentation state.
66
+ * @returns An array of strings.
67
+ */
68
+ getToolGroups(): string[] {
69
+ return Object.keys(this.state.toolGroups);
70
+ }
71
+
72
+ /**
73
+ * It returns the colorLUT at the specified index.
74
+ * @param lutIndex - The index of the color LUT to retrieve.
75
+ * @returns A ColorLUT object.
76
+ */
77
+ getColorLUT(lutIndex: number): ColorLUT | undefined {
78
+ return this.state.colorLUT[lutIndex];
79
+ }
80
+
81
+ /**
82
+ * Reset the state to the default state
83
+ */
84
+ resetState(): void {
85
+ this.state = cloneDeep(initialDefaultState);
86
+ }
87
+
88
+ /**
89
+ * Given a segmentation Id, return the segmentation state
90
+ * @param segmentationId - The id of the segmentation to get the data for.
91
+ * @returns - The segmentation data
92
+ */
93
+ getSegmentation(segmentationId: string): Segmentation | undefined {
94
+ return this.state.segmentations.find(
95
+ (segmentation) => segmentation.segmentationId === segmentationId
96
+ );
97
+ }
98
+
99
+ /**
100
+ * It adds a segmentation to the segmentations array.
101
+ * @param segmentation - Segmentation
102
+ */
103
+ addSegmentation(segmentation: Segmentation): void {
104
+ this._initDefaultColorLUTIfNecessary();
105
+
106
+ // Check if the segmentation already exists with the segmentationId
107
+ if (this.getSegmentation(segmentation.segmentationId)) {
108
+ throw new Error(
109
+ `Segmentation with id ${segmentation.segmentationId} already exists`
110
+ );
111
+ }
112
+
113
+ this.state.segmentations.push(segmentation);
114
+ }
115
+
116
+ /**
117
+ * Get the segmentation representations for a tool group
118
+ * @param toolGroupId - string
119
+ * @returns A list of segmentation representations.
120
+ */
121
+ getSegmentationRepresentations(
122
+ toolGroupId: string
123
+ ): ToolGroupSpecificRepresentations | undefined {
124
+ const toolGroupSegRepresentationsWithConfig =
125
+ this.state.toolGroups[toolGroupId];
126
+
127
+ if (!toolGroupSegRepresentationsWithConfig) {
128
+ return;
129
+ }
130
+
131
+ return toolGroupSegRepresentationsWithConfig.segmentationRepresentations;
132
+ }
133
+
134
+ /**
135
+ * Add a new segmentation representation to the toolGroup's segmentation representations.
136
+ * @param toolGroupId - The Id of the tool group .
137
+ * @param segmentationRepresentation - The segmentation representation to add.
138
+ */
139
+ addSegmentationRepresentation(
140
+ toolGroupId: string,
141
+ segmentationRepresentation: ToolGroupSpecificRepresentation
142
+ ): void {
143
+ // Initialize the default toolGroup state if not created yet
144
+ if (!this.state.toolGroups[toolGroupId]) {
145
+ this.state.toolGroups[toolGroupId] = {
146
+ segmentationRepresentations: [],
147
+ config: {} as SegmentationRepresentationConfig,
148
+ };
149
+ }
150
+
151
+ // local toolGroupSpecificSegmentationState
152
+ this.state.toolGroups[toolGroupId].segmentationRepresentations.push(
153
+ segmentationRepresentation
154
+ );
155
+
156
+ this._handleActiveSegmentation(toolGroupId, segmentationRepresentation);
157
+ }
158
+
159
+ /**
160
+ * Get the global config containing both representation config
161
+ * and render inactive segmentations config
162
+ * @returns The global config object.
163
+ */
164
+ getGlobalConfig(): SegmentationRepresentationConfig {
165
+ return this.state.globalConfig;
166
+ }
167
+
168
+ /**
169
+ * It sets the global segmentation config including both representation config
170
+ * and render inactive segmentations config
171
+ * @param config - The global configuration for the segmentations.
172
+ */
173
+ setGlobalConfig(config: SegmentationRepresentationConfig): void {
174
+ this.state.globalConfig = config;
175
+ }
176
+
177
+ /**
178
+ * Given a toolGroupId and a segmentationRepresentationUID, return the segmentation
179
+ * representation for that tool group.
180
+ * @param toolGroupId - The Id of the tool group
181
+ * @param segmentationRepresentationUID - string
182
+ * @returns The segmentation representation.
183
+ */
184
+ getSegmentationRepresentationByUID(
185
+ toolGroupId: string,
186
+ segmentationRepresentationUID: string
187
+ ): ToolGroupSpecificRepresentation | undefined {
188
+ const toolGroupSegRepresentations =
189
+ this.getSegmentationRepresentations(toolGroupId);
190
+
191
+ const segmentationData = toolGroupSegRepresentations.find(
192
+ (representation) =>
193
+ representation.segmentationRepresentationUID ===
194
+ segmentationRepresentationUID
195
+ );
196
+
197
+ return segmentationData;
198
+ }
199
+
200
+ /**
201
+ * It removes the segmentation from the segmentation state.
202
+ * @param segmentationId - The id of the segmentation to remove.
203
+ */
204
+ removeSegmentation(segmentationId: string): void {
205
+ this.state.segmentations = this.state.segmentations.filter(
206
+ (segmentation) => segmentation.segmentationId !== segmentationId
207
+ );
208
+ }
209
+
210
+ /**
211
+ * Remove a segmentation representation from the toolGroup
212
+ * @param toolGroupId - The Id of the tool group
213
+ * @param segmentationRepresentationUID - the uid of the segmentation representation to remove
214
+ * @param immediate - If true, the viewport will be updated immediately.
215
+ */
216
+ removeSegmentationRepresentation(
217
+ toolGroupId: string,
218
+ segmentationRepresentationUID: string
219
+ ): void {
220
+ const toolGroupSegmentationRepresentations =
221
+ this.getSegmentationRepresentations(toolGroupId);
222
+
223
+ if (
224
+ !toolGroupSegmentationRepresentations ||
225
+ !toolGroupSegmentationRepresentations.length
226
+ ) {
227
+ throw new Error(
228
+ `No viewport specific segmentation state found for viewport ${toolGroupId}`
229
+ );
230
+ }
231
+
232
+ const state =
233
+ toolGroupSegmentationRepresentations as ToolGroupSpecificRepresentations;
234
+ const index = state.findIndex(
235
+ (segData) =>
236
+ segData.segmentationRepresentationUID === segmentationRepresentationUID
237
+ );
238
+
239
+ if (index === -1) {
240
+ console.warn(
241
+ `No viewport specific segmentation state data found for viewport ${toolGroupId} and segmentation data UID ${segmentationRepresentationUID}`
242
+ );
243
+ }
244
+
245
+ const removedSegmentationRepresentation =
246
+ toolGroupSegmentationRepresentations[index];
247
+
248
+ toolGroupSegmentationRepresentations.splice(index, 1);
249
+
250
+ this._handleActiveSegmentation(
251
+ toolGroupId,
252
+ removedSegmentationRepresentation
253
+ );
254
+ }
255
+
256
+ /**
257
+ * Set the active segmentation data for a tool group
258
+ * @param toolGroupId - The Id of the tool group that owns the
259
+ * segmentation data.
260
+ * @param segmentationRepresentationUID - string
261
+ */
262
+ setActiveSegmentationRepresentation(
263
+ toolGroupId: string,
264
+ segmentationRepresentationUID: string
265
+ ): void {
266
+ const toolGroupSegmentations =
267
+ this.getSegmentationRepresentations(toolGroupId);
268
+
269
+ if (!toolGroupSegmentations || !toolGroupSegmentations.length) {
270
+ throw new Error(
271
+ `No segmentation data found for toolGroupId: ${toolGroupId}`
272
+ );
273
+ }
274
+
275
+ const segmentationData = toolGroupSegmentations.find(
276
+ (segmentationData) =>
277
+ segmentationData.segmentationRepresentationUID ===
278
+ segmentationRepresentationUID
279
+ );
280
+
281
+ if (!segmentationData) {
282
+ throw new Error(
283
+ `No segmentation data found for segmentation data UID ${segmentationRepresentationUID}`
284
+ );
285
+ }
286
+
287
+ segmentationData.active = true;
288
+ this._handleActiveSegmentation(toolGroupId, segmentationData);
289
+ }
290
+
291
+ /**
292
+ * Given a tool group Id it returns the tool group specific representation config
293
+ *
294
+ * @param toolGroupId - The Id of the tool group
295
+ * @returns A SegmentationConfig object.
296
+ */
297
+ getToolGroupSpecificConfig(
298
+ toolGroupId: string
299
+ ): SegmentationRepresentationConfig | undefined {
300
+ const toolGroupStateWithConfig = this.state.toolGroups[toolGroupId];
301
+
302
+ if (!toolGroupStateWithConfig) {
303
+ return;
304
+ }
305
+
306
+ return toolGroupStateWithConfig.config;
307
+ }
308
+
309
+ getSegmentationRepresentationSpecificConfig(
310
+ toolGroupId: string,
311
+ segmentationRepresentationUID: string
312
+ ): RepresentationConfig {
313
+ const segmentationRepresentation = this.getSegmentationRepresentationByUID(
314
+ toolGroupId,
315
+ segmentationRepresentationUID
316
+ );
317
+
318
+ if (!segmentationRepresentation) {
319
+ return;
320
+ }
321
+
322
+ return segmentationRepresentation.segmentationRepresentationSpecificConfig;
323
+ }
324
+
325
+ setSegmentationRepresentationSpecificConfig(
326
+ toolGroupId: string,
327
+ segmentationRepresentationUID: string,
328
+ config: RepresentationConfig
329
+ ): void {
330
+ const segmentationRepresentation = this.getSegmentationRepresentationByUID(
331
+ toolGroupId,
332
+ segmentationRepresentationUID
333
+ );
334
+
335
+ if (!segmentationRepresentation) {
336
+ return;
337
+ }
338
+
339
+ segmentationRepresentation.segmentationRepresentationSpecificConfig =
340
+ config;
341
+ }
342
+
343
+ getSegmentSpecificConfig(
344
+ toolGroupId: string,
345
+ segmentationRepresentationUID: string,
346
+ segmentIndex: number
347
+ ): RepresentationConfig {
348
+ const segmentationRepresentation = this.getSegmentationRepresentationByUID(
349
+ toolGroupId,
350
+ segmentationRepresentationUID
351
+ );
352
+
353
+ if (!segmentationRepresentation) {
354
+ return;
355
+ }
356
+
357
+ return segmentationRepresentation.segmentSpecificConfig[segmentIndex];
358
+ }
359
+
360
+ setSegmentSpecificConfig(
361
+ toolGroupId: string,
362
+ segmentationRepresentationUID: string,
363
+ config: SegmentSpecificRepresentationConfig
364
+ ): void {
365
+ const segmentationRepresentation = this.getSegmentationRepresentationByUID(
366
+ toolGroupId,
367
+ segmentationRepresentationUID
368
+ );
369
+
370
+ if (!segmentationRepresentation) {
371
+ return;
372
+ }
373
+
374
+ segmentationRepresentation.segmentSpecificConfig = config;
375
+ }
376
+
377
+ /**
378
+ * Set the segmentation representations config for a given tool group. It will create a new
379
+ * tool group specific config if one does not exist.
380
+ *
381
+ * @param toolGroupId - The Id of the tool group that the segmentation
382
+ * belongs to.
383
+ * @param config - SegmentationConfig
384
+ */
385
+ setSegmentationRepresentationConfig(
386
+ toolGroupId: string,
387
+ config: SegmentationRepresentationConfig
388
+ ): void {
389
+ let toolGroupStateWithConfig = this.state.toolGroups[toolGroupId];
390
+
391
+ if (!toolGroupStateWithConfig) {
392
+ this.state.toolGroups[toolGroupId] = {
393
+ segmentationRepresentations: [],
394
+ config: {
395
+ renderInactiveSegmentations: true,
396
+ representations: {},
397
+ },
398
+ };
399
+
400
+ toolGroupStateWithConfig = this.state.toolGroups[toolGroupId];
401
+ }
402
+
403
+ toolGroupStateWithConfig.config = {
404
+ ...toolGroupStateWithConfig.config,
405
+ ...config,
406
+ };
407
+ }
408
+
409
+ /**
410
+ * It adds a color LUT to the state.
411
+ * @param colorLUT - ColorLUT
412
+ * @param lutIndex - The index of the color LUT table to add.
413
+ */
414
+ addColorLUT(colorLUT: ColorLUT, lutIndex: number): void {
415
+ if (this.state.colorLUT[lutIndex]) {
416
+ console.log('Color LUT table already exists, overwriting');
417
+ }
418
+
419
+ this.state.colorLUT[lutIndex] = colorLUT;
420
+ }
421
+
422
+ /**
423
+ * Removes a color LUT to the state.
424
+ * @param colorLUTIndex - The index of the color LUT table to remove.
425
+ */
426
+ removeColorLUT(colorLUTIndex: number): void {
427
+ delete this.state.colorLUT[colorLUTIndex];
428
+ }
429
+
430
+ /**
431
+ * It handles the active segmentation representation based on the active status of the
432
+ * segmentation representation that was added or removed.
433
+ *
434
+ * @param toolGroupId - The Id of the tool group that the segmentation representation belongs to.
435
+ * @param recentlyAddedOrRemovedSegmentationRepresentation - ToolGroupSpecificSegmentationData
436
+ */
437
+ _handleActiveSegmentation(
438
+ toolGroupId: string,
439
+ recentlyAddedOrRemovedSegmentationRepresentation: ToolGroupSpecificRepresentation
440
+ ): void {
441
+ const segmentationRepresentations =
442
+ this.getSegmentationRepresentations(toolGroupId);
443
+
444
+ // 1. If there is no segmentation representations, return early
445
+ if (segmentationRepresentations.length === 0) {
446
+ return;
447
+ }
448
+
449
+ // 2. If there is only one segmentation representation, make that one active
450
+ if (segmentationRepresentations.length === 1) {
451
+ segmentationRepresentations[0].active = true;
452
+ return;
453
+ }
454
+
455
+ // 3. If removed Segmentation representation was active, make the first one active
456
+ const activeSegmentationRepresentations =
457
+ segmentationRepresentations.filter(
458
+ (representation) => representation.active
459
+ );
460
+
461
+ if (activeSegmentationRepresentations.length === 0) {
462
+ segmentationRepresentations[0].active = true;
463
+ return;
464
+ }
465
+
466
+ // 4. If the added segmentation representation is active, make other segmentation
467
+ // representations inactive
468
+ if (recentlyAddedOrRemovedSegmentationRepresentation.active) {
469
+ segmentationRepresentations.forEach((representation) => {
470
+ if (
471
+ representation.segmentationRepresentationUID !==
472
+ recentlyAddedOrRemovedSegmentationRepresentation.segmentationRepresentationUID
473
+ ) {
474
+ representation.active = false;
475
+ }
476
+ });
477
+ }
478
+
479
+ // 5. if added/removed segmentation is is inactive, do nothing
480
+ }
481
+
482
+ _initDefaultColorLUTIfNecessary() {
483
+ // if colorLUTTable is not specified or the default one is not found
484
+ if (this.state.colorLUT.length === 0 || !this.state.colorLUT[0]) {
485
+ this.addColorLUT(CORNERSTONE_COLOR_LUT as ColorLUT, 0);
486
+ }
487
+ }
488
+ }
489
+
490
+ const defaultSegmentationStateManager = new SegmentationStateManager('DEFAULT');
491
+ export { defaultSegmentationStateManager };
@@ -0,0 +1,60 @@
1
+ import { ToolGroupSpecificRepresentation } from '../../types/SegmentationStateTypes';
2
+ import { getDefaultSegmentationStateManager } from './segmentationState';
3
+ import { triggerSegmentationRepresentationModified } from './triggerSegmentationEvents';
4
+
5
+ /**
6
+ * Get the active segmentation representation for the tool group with
7
+ * the given toolGroupId.
8
+ * @param toolGroupId - The Id of the tool group
9
+ * @returns The active segmentation representation for the tool group.
10
+ */
11
+ function getActiveSegmentationRepresentation(
12
+ toolGroupId: string
13
+ ): ToolGroupSpecificRepresentation {
14
+ const segmentationStateManager = getDefaultSegmentationStateManager();
15
+
16
+ const toolGroupSegmentationRepresentations =
17
+ segmentationStateManager.getSegmentationRepresentations(toolGroupId);
18
+
19
+ if (!toolGroupSegmentationRepresentations) {
20
+ return;
21
+ }
22
+
23
+ const activeRepresentation = toolGroupSegmentationRepresentations.find(
24
+ (representation) => representation.active
25
+ );
26
+
27
+ return activeRepresentation;
28
+ }
29
+
30
+ /**
31
+ * Set the active segmentation for the given tool group for all its viewports
32
+ *
33
+ * @param toolGroupId - The Id of the tool group to set the active
34
+ * segmentation for.
35
+ * @param segmentationRepresentationUID - The id of the segmentation representation to set as
36
+ * active.
37
+ */
38
+ function setActiveSegmentationRepresentation(
39
+ toolGroupId: string,
40
+ segmentationRepresentationUID: string
41
+ ): void {
42
+ const segmentationStateManager = getDefaultSegmentationStateManager();
43
+
44
+ segmentationStateManager.setActiveSegmentationRepresentation(
45
+ toolGroupId,
46
+ segmentationRepresentationUID
47
+ );
48
+
49
+ triggerSegmentationRepresentationModified(
50
+ toolGroupId,
51
+ segmentationRepresentationUID
52
+ );
53
+ }
54
+
55
+ export {
56
+ // get
57
+ getActiveSegmentationRepresentation,
58
+ // set
59
+ setActiveSegmentationRepresentation,
60
+ };
@@ -0,0 +1,77 @@
1
+ import _cloneDeep from 'lodash.clonedeep';
2
+ import {
3
+ SegmentationRepresentationConfig,
4
+ RepresentationPublicInput,
5
+ } from '../../types/SegmentationStateTypes';
6
+ import Representations from '../../enums/SegmentationRepresentations';
7
+ import { getToolGroup } from '../../store/ToolGroupManager';
8
+
9
+ import { labelmapDisplay } from '../../tools/displayTools/Labelmap';
10
+ import { contourDisplay } from '../../tools/displayTools/Contour';
11
+
12
+ /**
13
+ * Set the specified segmentation representations on the viewports of the specified
14
+ * toolGroup. It accepts a second argument which is a toolGroup specific representation
15
+ * configuration.
16
+ *
17
+ * @param toolGroupId - The Id of the toolGroup to add the segmentation representations to
18
+ * @param representationInputArray - An array of segmentation representations to add to the toolGroup
19
+ * @param toolGroupSpecificRepresentationConfig - The toolGroup specific configuration
20
+ * for the segmentation representations
21
+ */
22
+ async function addSegmentationRepresentations(
23
+ toolGroupId: string,
24
+ representationInputArray: RepresentationPublicInput[],
25
+ toolGroupSpecificRepresentationConfig?: SegmentationRepresentationConfig
26
+ ): Promise<string[]> {
27
+ // Check if there exists a toolGroup with the toolGroupId
28
+ const toolGroup = getToolGroup(toolGroupId);
29
+
30
+ if (!toolGroup) {
31
+ throw new Error(`No tool group found for toolGroupId: ${toolGroupId}`);
32
+ }
33
+
34
+ const promises = representationInputArray.map((representationInput) => {
35
+ return _addSegmentationRepresentation(
36
+ toolGroupId,
37
+ representationInput,
38
+ toolGroupSpecificRepresentationConfig
39
+ );
40
+ });
41
+
42
+ const segmentationRepresentationUIDs = await Promise.all(promises);
43
+
44
+ return segmentationRepresentationUIDs;
45
+ }
46
+
47
+ async function _addSegmentationRepresentation(
48
+ toolGroupId: string,
49
+ representationInput: RepresentationPublicInput,
50
+ toolGroupSpecificRepresentationConfig?: SegmentationRepresentationConfig
51
+ ): Promise<string> {
52
+ let segmentationRepresentationUID;
53
+
54
+ if (representationInput.type === Representations.Labelmap) {
55
+ segmentationRepresentationUID =
56
+ await labelmapDisplay.addSegmentationRepresentation(
57
+ toolGroupId,
58
+ representationInput,
59
+ toolGroupSpecificRepresentationConfig
60
+ );
61
+ } else if (representationInput.type === Representations.Contour) {
62
+ segmentationRepresentationUID =
63
+ await contourDisplay.addSegmentationRepresentation(
64
+ toolGroupId,
65
+ representationInput,
66
+ toolGroupSpecificRepresentationConfig
67
+ );
68
+ } else {
69
+ throw new Error(
70
+ `The representation type ${representationInput.type} is not supported`
71
+ );
72
+ }
73
+
74
+ return segmentationRepresentationUID;
75
+ }
76
+
77
+ export default addSegmentationRepresentations;
@@ -0,0 +1,27 @@
1
+ import _cloneDeep from 'lodash.clonedeep';
2
+ import { SegmentationPublicInput } from '../../types/SegmentationStateTypes';
3
+ import { validateSegmentationInput } from './helpers';
4
+ import { addSegmentation as addSegmentationToState } from './segmentationState';
5
+ /**
6
+ * Adds the segmentation to the cornerstone3D segmentation state. It should be
7
+ * noted that segmentations are not added to any toolGroup's viewports. In order to
8
+ * do so, you should add a "representation" of the segmentation to the toolGroup
9
+ * using addSegmentationRepresentations helper. The reason for this is that there
10
+ * can be multiple representations of the same segmentation (e.g. Labelmap and
11
+ * Contour, etc. - Currently only Labelmap representations is supported).
12
+ * @param segmentationInputArray - The array of segmentation input, each of which
13
+ * defining the segmentationId and the main representation data for the segmentation.
14
+ */
15
+ function addSegmentations(
16
+ segmentationInputArray: SegmentationPublicInput[]
17
+ ): void {
18
+ validateSegmentationInput(segmentationInputArray);
19
+
20
+ segmentationInputArray.map((segInput) => {
21
+ const segmentationInput = _cloneDeep(segInput);
22
+
23
+ addSegmentationToState(segmentationInput);
24
+ });
25
+ }
26
+
27
+ export default addSegmentations;
@@ -0,0 +1,29 @@
1
+ import * as color from './segmentationColor';
2
+ import * as visibility from './segmentationVisibility';
3
+ import {
4
+ getGlobalConfig,
5
+ getGlobalRepresentationConfig,
6
+ getToolGroupSpecificConfig,
7
+ setGlobalConfig,
8
+ setGlobalRepresentationConfig,
9
+ setToolGroupSpecificConfig,
10
+ setSegmentSpecificConfig,
11
+ getSegmentSpecificConfig,
12
+ setSegmentationRepresentationSpecificConfig,
13
+ getSegmentationRepresentationSpecificConfig,
14
+ } from './segmentationConfig';
15
+
16
+ export {
17
+ color,
18
+ visibility,
19
+ getGlobalConfig,
20
+ getGlobalRepresentationConfig,
21
+ getToolGroupSpecificConfig,
22
+ setGlobalConfig,
23
+ setGlobalRepresentationConfig,
24
+ setToolGroupSpecificConfig,
25
+ setSegmentSpecificConfig,
26
+ getSegmentSpecificConfig,
27
+ setSegmentationRepresentationSpecificConfig,
28
+ getSegmentationRepresentationSpecificConfig,
29
+ };