@cornerstonejs/tools 2.0.0-beta.26 → 2.0.0-beta.28

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 (318) hide show
  1. package/dist/esm/eventListeners/index.d.ts +2 -2
  2. package/dist/esm/eventListeners/index.js +2 -2
  3. package/dist/esm/eventListeners/mouse/mouseDownListener.js +8 -0
  4. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +18 -12
  5. package/dist/esm/eventListeners/segmentation/index.d.ts +1 -3
  6. package/dist/esm/eventListeners/segmentation/index.js +1 -3
  7. package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.js +13 -10
  8. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +2 -3
  9. package/dist/esm/index.d.ts +2 -2
  10. package/dist/esm/index.js +2 -2
  11. package/dist/esm/init.js +1 -5
  12. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.d.ts +2 -0
  13. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +6 -5
  14. package/dist/esm/stateManagement/annotation/annotationState.js +11 -2
  15. package/dist/esm/stateManagement/index.d.ts +1 -4
  16. package/dist/esm/stateManagement/index.js +1 -3
  17. package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +9 -6
  18. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +43 -25
  19. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +207 -162
  20. package/dist/esm/stateManagement/segmentation/SegmentationStyle.d.ts +42 -0
  21. package/dist/esm/stateManagement/segmentation/SegmentationStyle.js +162 -0
  22. package/dist/esm/stateManagement/segmentation/activeSegmentation.d.ts +4 -5
  23. package/dist/esm/stateManagement/segmentation/activeSegmentation.js +10 -14
  24. package/dist/esm/stateManagement/segmentation/addColorLUT.d.ts +2 -2
  25. package/dist/esm/stateManagement/segmentation/addColorLUT.js +15 -1
  26. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationsToViewport.d.ts +15 -0
  27. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationsToViewport.js +49 -0
  28. package/dist/esm/stateManagement/segmentation/addSegmentations.d.ts +1 -1
  29. package/dist/esm/stateManagement/segmentation/addSegmentations.js +11 -7
  30. package/dist/esm/stateManagement/segmentation/config/index.d.ts +2 -2
  31. package/dist/esm/stateManagement/segmentation/config/index.js +2 -2
  32. package/dist/esm/stateManagement/segmentation/config/segmentationColor.d.ts +4 -4
  33. package/dist/esm/stateManagement/segmentation/config/segmentationColor.js +24 -24
  34. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.d.ts +22 -7
  35. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +29 -29
  36. package/dist/esm/stateManagement/segmentation/config/styleHelpers.d.ts +39 -0
  37. package/dist/esm/stateManagement/segmentation/config/styleHelpers.js +48 -0
  38. package/dist/esm/stateManagement/segmentation/getActiveSegmentation.d.ts +2 -0
  39. package/dist/esm/stateManagement/segmentation/{getGlobalConfig.js → getActiveSegmentation.js} +2 -2
  40. package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.d.ts +1 -1
  41. package/dist/esm/stateManagement/segmentation/getGlobalStyle.d.ts +3 -0
  42. package/dist/esm/stateManagement/segmentation/getGlobalStyle.js +4 -0
  43. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.d.ts +9 -1
  44. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.js +10 -2
  45. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.d.ts +5 -1
  46. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.js +2 -2
  47. package/dist/esm/stateManagement/segmentation/getViewportIdsWithSegmentation.js +5 -5
  48. package/dist/esm/stateManagement/segmentation/getViewportSegmentations.d.ts +3 -0
  49. package/dist/esm/stateManagement/segmentation/getViewportSegmentations.js +15 -0
  50. package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.d.ts +1 -0
  51. package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.js +31 -0
  52. package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.d.ts +1 -2
  53. package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.js +4 -6
  54. package/dist/esm/stateManagement/segmentation/{convertVolumeToStackSegmentation.d.ts → helpers/computeStackLabelmapFromVolume.d.ts} +2 -2
  55. package/dist/esm/stateManagement/segmentation/{convertVolumeToStackSegmentation.js → helpers/computeStackLabelmapFromVolume.js} +8 -5
  56. package/dist/esm/stateManagement/segmentation/helpers/computeVolumeLabelmapFromStack.d.ts +3 -0
  57. package/dist/esm/stateManagement/segmentation/helpers/computeVolumeLabelmapFromStack.js +4 -0
  58. package/dist/esm/stateManagement/segmentation/helpers/convertStackToVolumeLabelmap.d.ts +1 -0
  59. package/dist/esm/stateManagement/segmentation/helpers/convertStackToVolumeLabelmap.js +7 -0
  60. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.d.ts +8 -0
  61. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.js +27 -0
  62. package/dist/esm/stateManagement/segmentation/helpers/index.d.ts +2 -1
  63. package/dist/esm/stateManagement/segmentation/helpers/index.js +2 -1
  64. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +4 -6
  65. package/dist/esm/stateManagement/segmentation/helpers/updateStackSegmentationState.js +1 -1
  66. package/dist/esm/stateManagement/segmentation/index.d.ts +14 -7
  67. package/dist/esm/stateManagement/segmentation/index.js +14 -7
  68. package/dist/esm/stateManagement/segmentation/{addRepresentationData.d.ts → internalAddRepresentationData.d.ts} +2 -2
  69. package/dist/esm/stateManagement/segmentation/{addRepresentationData.js → internalAddRepresentationData.js} +5 -2
  70. package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.d.ts +1 -1
  71. package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.js +18 -58
  72. package/dist/esm/stateManagement/segmentation/polySeg/Contour/contourComputationStrategies.js +9 -10
  73. package/dist/esm/stateManagement/segmentation/polySeg/Contour/utils/extractContourData.js +8 -5
  74. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/computeAndAddLabelmapRepresentation.js +9 -2
  75. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertContourToLabelmap.js +2 -2
  76. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/labelmapComputationStrategies.js +4 -6
  77. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.d.ts +1 -1
  78. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.js +4 -4
  79. package/dist/esm/stateManagement/segmentation/polySeg/Surface/createAndCacheSurfacesFromRaw.js +1 -7
  80. package/dist/esm/stateManagement/segmentation/polySeg/Surface/surfaceComputationStrategies.js +1 -3
  81. package/dist/esm/stateManagement/segmentation/polySeg/Surface/updateSurfaceData.js +9 -8
  82. package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.d.ts +2 -1
  83. package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.js +3 -9
  84. package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.d.ts +1 -1
  85. package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.js +7 -5
  86. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.d.ts +14 -2
  87. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +69 -19
  88. package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +6 -18
  89. package/dist/esm/stateManagement/segmentation/segmentationState.js +9 -18
  90. package/dist/esm/stateManagement/segmentation/setActiveSegmentation.d.ts +1 -0
  91. package/dist/esm/stateManagement/segmentation/setActiveSegmentation.js +5 -0
  92. package/dist/esm/stateManagement/segmentation/setGlobalStyle.d.ts +3 -0
  93. package/dist/esm/stateManagement/segmentation/setGlobalStyle.js +8 -0
  94. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.d.ts +5 -1
  95. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.js +2 -2
  96. package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.d.ts +1 -3
  97. package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.js +1 -3
  98. package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +2 -1
  99. package/dist/esm/store/ToolGroupManager/ToolGroup.js +23 -9
  100. package/dist/esm/store/ToolGroupManager/createToolGroup.d.ts +1 -1
  101. package/dist/esm/store/ToolGroupManager/createToolGroup.js +3 -3
  102. package/dist/esm/tools/AdvancedMagnifyTool.js +1 -1
  103. package/dist/esm/tools/CrosshairsTool.js +1 -2
  104. package/dist/esm/tools/MIPJumpToClickTool.js +1 -1
  105. package/dist/esm/tools/ReferenceLinesTool.js +5 -2
  106. package/dist/esm/tools/StackScrollTool.d.ts +4 -0
  107. package/dist/esm/tools/StackScrollTool.js +104 -15
  108. package/dist/esm/tools/WindowLevelTool.js +3 -2
  109. package/dist/esm/tools/annotation/AngleTool.js +1 -1
  110. package/dist/esm/tools/annotation/BidirectionalTool.js +1 -1
  111. package/dist/esm/tools/annotation/CircleROITool.js +1 -1
  112. package/dist/esm/tools/annotation/EllipticalROITool.js +1 -1
  113. package/dist/esm/tools/annotation/HeightTool.js +1 -1
  114. package/dist/esm/tools/annotation/LengthTool.js +1 -1
  115. package/dist/esm/tools/annotation/LivewireContourTool.js +3 -3
  116. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +1 -1
  117. package/dist/esm/tools/annotation/ProbeTool.js +2 -2
  118. package/dist/esm/tools/annotation/RectangleROITool.js +1 -1
  119. package/dist/esm/tools/annotation/SplineROITool.js +2 -3
  120. package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +1 -1
  121. package/dist/esm/tools/base/BaseTool.d.ts +1 -2
  122. package/dist/esm/tools/base/BaseTool.js +5 -18
  123. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +28 -25
  124. package/dist/esm/tools/displayTools/Contour/contourConfig.d.ts +3 -3
  125. package/dist/esm/tools/displayTools/Contour/contourConfig.js +2 -2
  126. package/dist/esm/tools/displayTools/Contour/contourDisplay.d.ts +1 -1
  127. package/dist/esm/tools/displayTools/Contour/contourDisplay.js +4 -7
  128. package/dist/esm/tools/displayTools/Contour/contourHandler/handleContourSegmentation.js +26 -57
  129. package/dist/esm/tools/displayTools/Contour/removeContourFromElement.d.ts +1 -1
  130. package/dist/esm/tools/displayTools/Contour/removeContourFromElement.js +2 -4
  131. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +1 -1
  132. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +39 -10
  133. package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.d.ts +3 -5
  134. package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.js +3 -16
  135. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
  136. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +86 -90
  137. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.d.ts +1 -1
  138. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +3 -2
  139. package/dist/esm/tools/displayTools/Surface/addOrUpdateSurfaceToElement.d.ts +1 -1
  140. package/dist/esm/tools/displayTools/Surface/addOrUpdateSurfaceToElement.js +3 -3
  141. package/dist/esm/tools/displayTools/Surface/removeSurfaceFromElement.d.ts +2 -2
  142. package/dist/esm/tools/displayTools/Surface/removeSurfaceFromElement.js +5 -3
  143. package/dist/esm/tools/displayTools/Surface/surfaceConfig.d.ts +3 -3
  144. package/dist/esm/tools/displayTools/Surface/surfaceConfig.js +2 -2
  145. package/dist/esm/tools/displayTools/Surface/surfaceDisplay.d.ts +1 -1
  146. package/dist/esm/tools/displayTools/Surface/surfaceDisplay.js +7 -8
  147. package/dist/esm/tools/index.d.ts +1 -2
  148. package/dist/esm/tools/index.js +1 -2
  149. package/dist/esm/tools/segmentation/BrushTool.d.ts +0 -4
  150. package/dist/esm/tools/segmentation/BrushTool.js +23 -22
  151. package/dist/esm/tools/segmentation/CircleROIStartEndThresholdTool.js +2 -2
  152. package/dist/esm/tools/segmentation/CircleScissorsTool.d.ts +1 -1
  153. package/dist/esm/tools/segmentation/CircleScissorsTool.js +11 -10
  154. package/dist/esm/tools/segmentation/PaintFillTool.js +5 -7
  155. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +2 -2
  156. package/dist/esm/tools/segmentation/RectangleScissorsTool.d.ts +0 -1
  157. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +9 -10
  158. package/dist/esm/tools/segmentation/SegmentSelectTool.d.ts +2 -2
  159. package/dist/esm/tools/segmentation/SegmentSelectTool.js +17 -26
  160. package/dist/esm/tools/segmentation/SphereScissorsTool.d.ts +0 -1
  161. package/dist/esm/tools/segmentation/SphereScissorsTool.js +6 -9
  162. package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +2 -0
  163. package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +2 -0
  164. package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +1 -2
  165. package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +1 -1
  166. package/dist/esm/tools/segmentation/strategies/compositions/preview.js +3 -3
  167. package/dist/esm/tools/segmentation/strategies/compositions/regionFill.js +4 -4
  168. package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +1 -1
  169. package/dist/esm/tools/segmentation/strategies/fillCircle.js +3 -3
  170. package/dist/esm/tools/segmentation/strategies/fillSphere.js +3 -3
  171. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +21 -6
  172. package/dist/esm/types/AnnotationGroupSelector.js +0 -1
  173. package/dist/esm/types/AnnotationRenderContext.js +0 -1
  174. package/dist/esm/types/AnnotationStyle.js +0 -1
  175. package/dist/esm/types/AnnotationTypes.js +0 -1
  176. package/dist/esm/types/BoundsIJK.js +0 -1
  177. package/dist/esm/types/CINETypes.js +0 -1
  178. package/dist/esm/types/CalculatorTypes.js +0 -1
  179. package/dist/esm/types/CardinalSplineProps.js +0 -1
  180. package/dist/esm/types/ClosestControlPoint.js +0 -1
  181. package/dist/esm/types/ClosestPoint.js +0 -1
  182. package/dist/esm/types/ClosestSplinePoint.js +0 -1
  183. package/dist/esm/types/ContourSegmentationAnnotation.js +0 -1
  184. package/dist/esm/types/ContourTypes.d.ts +1 -2
  185. package/dist/esm/types/ContourTypes.js +0 -1
  186. package/dist/esm/types/ControlPointInfo.js +0 -1
  187. package/dist/esm/types/CursorTypes.js +0 -1
  188. package/dist/esm/types/EventTypes.d.ts +2 -2
  189. package/dist/esm/types/EventTypes.js +0 -1
  190. package/dist/esm/types/FloodFillTypes.js +0 -1
  191. package/dist/esm/types/IAnnotationManager.js +0 -1
  192. package/dist/esm/types/IBaseTool.js +0 -1
  193. package/dist/esm/types/IDistance.js +0 -1
  194. package/dist/esm/types/IPoints.js +0 -1
  195. package/dist/esm/types/ISculptToolShape.js +0 -1
  196. package/dist/esm/types/ISetToolModeOptions.js +0 -1
  197. package/dist/esm/types/ISpline.js +0 -1
  198. package/dist/esm/types/ISynchronizerEventHandler.js +0 -1
  199. package/dist/esm/types/IToolClassReference.js +0 -1
  200. package/dist/esm/types/IToolGroup.js +0 -1
  201. package/dist/esm/types/ITouchPoints.js +0 -1
  202. package/dist/esm/types/InteractionTypes.js +0 -1
  203. package/dist/esm/types/InternalToolTypes.js +0 -1
  204. package/dist/esm/types/InterpolationTypes.js +0 -1
  205. package/dist/esm/types/JumpToSliceOptions.js +0 -1
  206. package/dist/esm/types/LabelmapToolOperationData.d.ts +0 -1
  207. package/dist/esm/types/LabelmapToolOperationData.js +0 -1
  208. package/dist/esm/types/LabelmapTypes.d.ts +3 -7
  209. package/dist/esm/types/LabelmapTypes.js +0 -1
  210. package/dist/esm/types/PlanarBoundingBox.js +0 -1
  211. package/dist/esm/types/PolySeg.d.ts +1 -1
  212. package/dist/esm/types/PolySeg.js +0 -1
  213. package/dist/esm/types/SVGDrawingHelper.js +0 -1
  214. package/dist/esm/types/ScrollOptions.js +0 -1
  215. package/dist/esm/types/SegmentationStateTypes.d.ts +35 -56
  216. package/dist/esm/types/SegmentationStateTypes.js +0 -1
  217. package/dist/esm/types/SplineCurveSegment.js +0 -1
  218. package/dist/esm/types/SplineLineSegment.js +0 -1
  219. package/dist/esm/types/SplineProps.js +0 -1
  220. package/dist/esm/types/SurfaceTypes.d.ts +1 -1
  221. package/dist/esm/types/SurfaceTypes.js +0 -1
  222. package/dist/esm/types/ToolAction.js +0 -1
  223. package/dist/esm/types/ToolHandle.js +0 -1
  224. package/dist/esm/types/ToolProps.js +0 -1
  225. package/dist/esm/types/ToolSpecificAnnotationTypes.js +0 -1
  226. package/dist/esm/types/index.d.ts +2 -2
  227. package/dist/esm/types/index.js +0 -1
  228. package/dist/esm/utilities/cine/playClip.js +1 -1
  229. package/dist/esm/utilities/contours/updateContourPolyline.js +3 -0
  230. package/dist/esm/utilities/index.d.ts +2 -1
  231. package/dist/esm/utilities/index.js +2 -1
  232. package/dist/esm/utilities/math/circle/_types.js +0 -1
  233. package/dist/esm/utilities/math/polyline/planarFreehandROIInternalTypes.js +0 -1
  234. package/dist/esm/utilities/pointInSurroundingSphereCallback.d.ts +8 -0
  235. package/dist/esm/utilities/pointInSurroundingSphereCallback.js +71 -0
  236. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +2 -2
  237. package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +10 -9
  238. package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +9 -8
  239. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +14 -16
  240. package/dist/esm/utilities/segmentation/index.d.ts +1 -3
  241. package/dist/esm/utilities/segmentation/index.js +1 -3
  242. package/dist/esm/utilities/voi/colorbar/ColorbarCanvas.js +3 -0
  243. package/dist/esm/utilities/voi/colorbar/ViewportColorbar.js +1 -1
  244. package/dist/esm/utilities/voi/colorbar/types/ColorbarCanvasProps.js +0 -1
  245. package/dist/esm/utilities/voi/colorbar/types/ColorbarCommonProps.js +0 -1
  246. package/dist/esm/utilities/voi/colorbar/types/ColorbarImageRange.js +0 -1
  247. package/dist/esm/utilities/voi/colorbar/types/ColorbarProps.js +0 -1
  248. package/dist/esm/utilities/voi/colorbar/types/ColorbarSize.js +0 -1
  249. package/dist/esm/utilities/voi/colorbar/types/ColorbarTicksProps.js +0 -1
  250. package/dist/esm/utilities/voi/colorbar/types/ColorbarTicksStyle.js +0 -1
  251. package/dist/esm/utilities/voi/colorbar/types/ColorbarVOIRange.js +0 -1
  252. package/dist/esm/utilities/voi/colorbar/types/ViewportColorbarProps.js +0 -1
  253. package/dist/esm/utilities/voi/colorbar/types/index.js +0 -1
  254. package/dist/esm/widgets/types/WidgetProps.js +0 -1
  255. package/dist/esm/widgets/types/WidgetSize.js +0 -1
  256. package/dist/esm/widgets/types/index.js +0 -1
  257. package/dist/esm/workers/polySegConverters.js +4 -3
  258. package/package.json +73 -20
  259. package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.d.ts +0 -3
  260. package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.js +0 -14
  261. package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.d.ts +0 -3
  262. package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.js +0 -8
  263. package/dist/esm/stateManagement/segmentation/addSegmentation.d.ts +0 -2
  264. package/dist/esm/stateManagement/segmentation/addSegmentation.js +0 -11
  265. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.d.ts +0 -2
  266. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.js +0 -10
  267. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentations.d.ts +0 -8
  268. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentations.js +0 -19
  269. package/dist/esm/stateManagement/segmentation/config/segmentationConfig.d.ts +0 -14
  270. package/dist/esm/stateManagement/segmentation/config/segmentationConfig.js +0 -54
  271. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.d.ts +0 -1
  272. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.js +0 -8
  273. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.d.ts +0 -1
  274. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.js +0 -8
  275. package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.d.ts +0 -2
  276. package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.js +0 -5
  277. package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.d.ts +0 -2
  278. package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.js +0 -6
  279. package/dist/esm/stateManagement/segmentation/getGlobalConfig.d.ts +0 -2
  280. package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.d.ts +0 -2
  281. package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.js +0 -5
  282. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.d.ts +0 -2
  283. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.js +0 -5
  284. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.d.ts +0 -7
  285. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.js +0 -6
  286. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.d.ts +0 -2
  287. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.js +0 -12
  288. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.d.ts +0 -2
  289. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.js +0 -5
  290. package/dist/esm/stateManagement/segmentation/removeRepresentation.d.ts +0 -1
  291. package/dist/esm/stateManagement/segmentation/removeRepresentation.js +0 -9
  292. package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.d.ts +0 -1
  293. package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.js +0 -9
  294. package/dist/esm/stateManagement/segmentation/setGlobalConfig.d.ts +0 -2
  295. package/dist/esm/stateManagement/segmentation/setGlobalConfig.js +0 -9
  296. package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.d.ts +0 -2
  297. package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.js +0 -9
  298. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.d.ts +0 -2
  299. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.js +0 -9
  300. package/dist/esm/tools/VolumeRotateMouseWheelTool.d.ts +0 -9
  301. package/dist/esm/tools/VolumeRotateMouseWheelTool.js +0 -52
  302. package/dist/esm/tools/displayTools/Contour/contourHandler/contourConfigCache.d.ts +0 -9
  303. package/dist/esm/tools/displayTools/Contour/contourHandler/contourConfigCache.js +0 -10
  304. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +0 -5
  305. package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js +0 -13
  306. package/dist/esm/utilities/segmentation/getDefaultRepresentationConfig.d.ts +0 -2
  307. package/dist/esm/utilities/segmentation/getDefaultRepresentationConfig.js +0 -11
  308. package/dist/esm/utilities/segmentation/isValidRepresentationConfig.d.ts +0 -2
  309. package/dist/esm/utilities/segmentation/isValidRepresentationConfig.js +0 -10
  310. package/dist/umd/17dd54813d5acc10bf8f.wasm +0 -0
  311. package/dist/umd/78.index.js +0 -3
  312. package/dist/umd/78.index.js.LICENSE.txt +0 -5
  313. package/dist/umd/78.index.js.map +0 -1
  314. package/dist/umd/985.index.js +0 -2
  315. package/dist/umd/985.index.js.map +0 -1
  316. package/dist/umd/index.js +0 -3
  317. package/dist/umd/index.js.LICENSE.txt +0 -6
  318. package/dist/umd/index.js.map +0 -1
@@ -1,23 +1,21 @@
1
1
  import { getEnabledElementByViewportId } from '@cornerstonejs/core';
2
2
  import Representations from '../../../enums/SegmentationRepresentations';
3
- import { deleteConfigCache } from './contourHandler/contourConfigCache';
4
3
  import { handleContourSegmentation } from './contourHandler/handleContourSegmentation';
5
- import { removeRepresentation as _removeRepresentation } from '../../../stateManagement/segmentation/removeRepresentation';
6
4
  import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
7
5
  import { canComputeRequestedRepresentation } from '../../../stateManagement/segmentation/polySeg/canComputeRequestedRepresentation';
8
6
  import { computeAndAddContourRepresentation } from '../../../stateManagement/segmentation/polySeg/Contour/computeAndAddContourRepresentation';
7
+ import removeContourFromElement from './removeContourFromElement';
9
8
  let polySegConversionInProgress = false;
10
- function removeRepresentation(viewportId, segmentationRepresentationUID, renderImmediate = false) {
9
+ function removeRepresentation(viewportId, segmentationId, renderImmediate = false) {
11
10
  const enabledElement = getEnabledElementByViewportId(viewportId);
12
11
  if (!enabledElement) {
13
12
  return;
14
13
  }
15
14
  const { viewport } = enabledElement;
16
- _removeRepresentation(segmentationRepresentationUID);
17
- deleteConfigCache(segmentationRepresentationUID);
18
15
  if (!renderImmediate) {
19
16
  return;
20
17
  }
18
+ removeContourFromElement(viewportId, segmentationId);
21
19
  viewport.render();
22
20
  }
23
21
  async function render(viewport, contourRepresentation) {
@@ -28,11 +26,10 @@ async function render(viewport, contourRepresentation) {
28
26
  }
29
27
  let contourData = segmentation.representationData[Representations.Contour];
30
28
  if (!contourData &&
31
- canComputeRequestedRepresentation(contourRepresentation.segmentationRepresentationUID) &&
29
+ canComputeRequestedRepresentation(segmentationId, Representations.Contour) &&
32
30
  !polySegConversionInProgress) {
33
31
  polySegConversionInProgress = true;
34
32
  contourData = await computeAndAddContourRepresentation(segmentationId, {
35
- segmentationRepresentationUID: contourRepresentation.segmentationRepresentationUID,
36
33
  viewport,
37
34
  });
38
35
  }
@@ -1,68 +1,38 @@
1
1
  import { addAnnotation } from '../../../../stateManagement/annotation/annotationState';
2
2
  import { cache, utilities } from '@cornerstonejs/core';
3
3
  import { getClosestImageIdForStackViewport } from '../../../../utilities/annotationHydration';
4
- import { getConfigCache, setConfigCache } from './contourConfigCache';
5
4
  import { addContourSegmentationAnnotation } from '../../../../utilities/contourSegmentation';
6
5
  import { validateGeometry } from './utils';
7
- import { getGlobalConfig } from '../../../../stateManagement/segmentation/getGlobalConfig';
8
6
  import { getHiddenSegmentIndices } from '../../../../stateManagement/segmentation/config/segmentationVisibility';
9
- import { getSegmentIndexConfig } from '../../../../stateManagement/segmentation/config/segmentationConfig';
7
+ import { SegmentationRepresentations } from '../../../../enums';
8
+ import { segmentationStyle } from '../../../../stateManagement/segmentation/SegmentationStyle';
10
9
  function handleContourSegmentation(viewport, geometryIds, annotationUIDsMap, contourRepresentation) {
11
- const addOrUpdateFn = annotationUIDsMap.size
12
- ? updateContourSets
13
- : addContourSetsToElement;
14
- addOrUpdateFn(viewport, geometryIds, contourRepresentation);
15
- }
16
- function updateContourSets(viewport, geometryIds, contourRepresentation) {
17
- const { segmentationRepresentationUID, config } = contourRepresentation;
18
- const baseConfig = config?.allSegments;
19
- const globalContourConfig = getGlobalConfig().representations.Contour;
20
- const newContourConfig = utilities.deepMerge(globalContourConfig, baseConfig);
21
- const cachedConfig = getConfigCache(segmentationRepresentationUID);
22
- const newOutlineWithActive = newContourConfig.outlineWidthActive;
23
- if (cachedConfig?.outlineWidthActive !== newOutlineWithActive) {
24
- setConfigCache(segmentationRepresentationUID, Object.assign({}, cachedConfig, {
25
- outlineWidthActive: newOutlineWithActive,
26
- }));
27
- }
28
- const segmentsToSetToInvisible = [];
29
- const segmentsToSetToVisible = [];
30
- const segmentsHidden = getHiddenSegmentIndices(viewport.id, segmentationRepresentationUID);
31
- for (const segmentIndex of segmentsHidden) {
32
- if (!cachedConfig.segmentsHidden.has(segmentIndex)) {
33
- segmentsToSetToInvisible.push(segmentIndex);
34
- }
10
+ if (annotationUIDsMap.size) {
11
+ updateContourSets(viewport, geometryIds, contourRepresentation);
35
12
  }
36
- for (const segmentIndex of cachedConfig.segmentsHidden) {
37
- if (!segmentsHidden.has(segmentIndex)) {
38
- segmentsToSetToVisible.push(segmentIndex);
39
- }
13
+ else {
14
+ addContourSetsToElement(viewport, geometryIds, contourRepresentation);
40
15
  }
41
- const mergedInvisibleSegments = Array.from(cachedConfig.segmentsHidden)
42
- .filter((segmentIndex) => !segmentsToSetToVisible.includes(segmentIndex))
43
- .concat(segmentsToSetToInvisible);
16
+ }
17
+ function updateContourSets(viewport, geometryIds, contourRepresentation) {
18
+ const { segmentationId } = contourRepresentation;
44
19
  const { segmentSpecificConfigs } = geometryIds.reduce((acc, geometryId) => {
45
20
  const geometry = cache.getGeometry(geometryId);
46
21
  const { data: contourSet } = geometry;
47
22
  const segmentIndex = contourSet.getSegmentIndex();
48
- const segmentSpecificConfig = getSegmentIndexConfig(segmentationRepresentationUID, segmentIndex);
23
+ const segmentSpecificConfig = segmentationStyle.getStyle({
24
+ viewportId: viewport.id,
25
+ segmentationId,
26
+ type: SegmentationRepresentations.Contour,
27
+ segmentIndex,
28
+ });
49
29
  acc.segmentSpecificConfigs[segmentIndex] = segmentSpecificConfig ?? {};
50
30
  return acc;
51
31
  }, { contourSets: [], segmentSpecificConfigs: {} });
52
- const affectedSegments = [
53
- ...mergedInvisibleSegments,
54
- ...segmentsToSetToVisible,
55
- ];
56
- const hasCustomSegmentSpecificConfig = Object.values(segmentSpecificConfigs).some((config) => Object.keys(config).length > 0);
57
- if (affectedSegments.length || hasCustomSegmentSpecificConfig) {
58
- setConfigCache(segmentationRepresentationUID, Object.assign({}, cachedConfig, {
59
- segmentsHidden: new Set(segmentsHidden),
60
- }));
61
- }
62
32
  viewport.render();
63
33
  }
64
34
  function addContourSetsToElement(viewport, geometryIds, contourRepresentation) {
65
- const { segmentationRepresentationUID, segmentationId } = contourRepresentation;
35
+ const { segmentationId } = contourRepresentation;
66
36
  const segmentSpecificMap = new Map();
67
37
  geometryIds.forEach((geometryId) => {
68
38
  const geometry = cache.getGeometry(geometryId);
@@ -72,7 +42,12 @@ function addContourSetsToElement(viewport, geometryIds, contourRepresentation) {
72
42
  }
73
43
  const segmentIndex = geometry.data.getSegmentIndex();
74
44
  validateGeometry(geometry);
75
- const segmentSpecificConfig = getSegmentIndexConfig(segmentationRepresentationUID, segmentIndex);
45
+ const segmentSpecificConfig = segmentationStyle.getStyle({
46
+ viewportId: viewport.id,
47
+ segmentationId,
48
+ type: SegmentationRepresentations.Contour,
49
+ segmentIndex,
50
+ });
76
51
  const contourSet = geometry.data;
77
52
  contourSet.contours.forEach((contour) => {
78
53
  const { points, color, id } = contour;
@@ -112,16 +87,10 @@ function addContourSetsToElement(viewport, geometryIds, contourRepresentation) {
112
87
  segmentSpecificMap.set(segmentIndex, segmentSpecificConfig);
113
88
  }
114
89
  });
115
- const baseConfig = contourRepresentation.config?.allSegments;
116
- const globalContourConfig = getGlobalConfig().representations.Contour;
117
- const newContourConfig = utilities.deepMerge(globalContourConfig, baseConfig);
118
- const outlineWidthActive = newContourConfig.outlineWidthActive;
119
- const segmentsHidden = getHiddenSegmentIndices(viewport.id, segmentationRepresentationUID);
120
- setConfigCache(segmentationRepresentationUID, Object.assign({}, getConfigCache(segmentationRepresentationUID), {
121
- segmentsHidden: new Set(segmentsHidden),
122
- segmentSpecificMap,
123
- outlineWidthActive,
124
- }));
90
+ const segmentsHidden = getHiddenSegmentIndices(viewport.id, {
91
+ segmentationId,
92
+ type: SegmentationRepresentations.Contour,
93
+ });
125
94
  viewport.resetCamera();
126
95
  viewport.render();
127
96
  }
@@ -1,2 +1,2 @@
1
- declare function removeContourFromElement(element: HTMLDivElement, segmentationRepresentationUID: string, removeFromCache?: boolean): void;
1
+ declare function removeContourFromElement(viewportId: string, segmentationId: string, removeFromCache?: boolean): void;
2
2
  export default removeContourFromElement;
@@ -1,8 +1,6 @@
1
- import { getSegmentationRepresentation, getSegmentation, } from '../../../stateManagement/segmentation/segmentationState';
1
+ import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
2
2
  import { removeAnnotation } from '../../../stateManagement';
3
- function removeContourFromElement(element, segmentationRepresentationUID, removeFromCache = false) {
4
- const segmentationRepresentation = getSegmentationRepresentation(segmentationRepresentationUID);
5
- const { segmentationId } = segmentationRepresentation;
3
+ function removeContourFromElement(viewportId, segmentationId, removeFromCache = false) {
6
4
  const segmentation = getSegmentation(segmentationId);
7
5
  const { annotationUIDsMap } = segmentation.representationData.Contour;
8
6
  annotationUIDsMap.forEach((annotationSet) => {
@@ -1,3 +1,3 @@
1
1
  import type { LabelmapSegmentationData } from '../../../types/LabelmapTypes';
2
- declare function addLabelmapToElement(element: HTMLDivElement, labelMapData: LabelmapSegmentationData, segmentationRepresentationUID: string): Promise<void>;
2
+ declare function addLabelmapToElement(element: HTMLDivElement, labelMapData: LabelmapSegmentationData, segmentationId: string): Promise<void>;
3
3
  export default addLabelmapToElement;
@@ -1,19 +1,26 @@
1
- import { getEnabledElement, addVolumesToViewports, addImageSlicesToViewports, Enums, } from '@cornerstonejs/core';
2
- import { isVolumeSegmentation } from '../../segmentation/strategies/utils/stackVolumeCheck';
3
- import { getSegmentationRepresentation } from '../../../stateManagement/segmentation/getSegmentationRepresentation';
1
+ import { getEnabledElement, addVolumesToViewports, addImageSlicesToViewports, Enums, cache, BaseVolumeViewport, volumeLoader, utilities, } from '@cornerstonejs/core';
4
2
  import { getCurrentLabelmapImageIdForViewport } from '../../../stateManagement/segmentation/getCurrentLabelmapImageIdForViewport';
5
- async function addLabelmapToElement(element, labelMapData, segmentationRepresentationUID) {
3
+ import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
4
+ import { triggerSegmentationModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
5
+ import { SegmentationRepresentations } from '../../../enums';
6
+ const { uuidv4 } = utilities;
7
+ async function addLabelmapToElement(element, labelMapData, segmentationId) {
6
8
  const enabledElement = getEnabledElement(element);
7
9
  const { renderingEngine, viewport } = enabledElement;
8
10
  const { id: viewportId } = viewport;
9
11
  const visibility = true;
10
12
  const immediateRender = false;
11
13
  const suppressEvents = true;
12
- if (isVolumeSegmentation(labelMapData, viewport)) {
14
+ if (viewport instanceof BaseVolumeViewport) {
15
+ const volumeLabelMapData = labelMapData;
16
+ const volumeId = _ensureVolumeHasVolumeId(volumeLabelMapData, segmentationId);
17
+ if (!cache.getVolume(volumeId)) {
18
+ await _handleMissingVolume(labelMapData);
19
+ }
13
20
  const volumeInputs = [
14
21
  {
15
- volumeId: labelMapData.volumeId,
16
- actorUID: segmentationRepresentationUID,
22
+ volumeId,
23
+ actorUID: `${segmentationId}-${SegmentationRepresentations.Labelmap}`,
17
24
  visibility,
18
25
  blendMode: Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,
19
26
  },
@@ -21,15 +28,37 @@ async function addLabelmapToElement(element, labelMapData, segmentationRepresent
21
28
  await addVolumesToViewports(renderingEngine, volumeInputs, [viewportId], immediateRender, suppressEvents);
22
29
  }
23
30
  else {
24
- const representation = getSegmentationRepresentation(segmentationRepresentationUID);
25
- const segmentationImageId = getCurrentLabelmapImageIdForViewport(viewport.id, representation.segmentationId);
31
+ const segmentationImageId = getCurrentLabelmapImageIdForViewport(viewport.id, segmentationId);
26
32
  const stackInputs = [
27
33
  {
28
34
  imageId: segmentationImageId,
29
- actorUID: segmentationRepresentationUID,
35
+ actorUID: `${segmentationId}-${SegmentationRepresentations.Labelmap}`,
30
36
  },
31
37
  ];
32
38
  await addImageSlicesToViewports(renderingEngine, stackInputs, [viewportId]);
33
39
  }
34
40
  }
41
+ function _ensureVolumeHasVolumeId(labelMapData, segmentationId) {
42
+ let { volumeId } = labelMapData;
43
+ if (!volumeId) {
44
+ volumeId = uuidv4();
45
+ const segmentation = getSegmentation(segmentationId);
46
+ segmentation.representationData.Labelmap = {
47
+ ...segmentation.representationData.Labelmap,
48
+ volumeId,
49
+ };
50
+ labelMapData.volumeId = volumeId;
51
+ triggerSegmentationModified(segmentationId);
52
+ }
53
+ return volumeId;
54
+ }
55
+ async function _handleMissingVolume(labelMapData) {
56
+ const stackData = labelMapData;
57
+ const hasImageIds = stackData.imageIds.length > 0;
58
+ if (!hasImageIds) {
59
+ throw new Error('cannot create labelmap, no imageIds found for the volume labelmap');
60
+ }
61
+ const volume = await volumeLoader.createAndCacheVolumeFromImages(labelMapData.volumeId || uuidv4(), stackData.imageIds);
62
+ return volume;
63
+ }
35
64
  export default addLabelmapToElement;
@@ -1,5 +1,3 @@
1
- import type { LabelmapConfig } from '../../../types/LabelmapTypes';
2
- declare function getDefaultLabelmapConfig(): LabelmapConfig;
3
- declare function isValidLabelmapConfig(config: any): boolean;
4
- export default getDefaultLabelmapConfig;
5
- export { isValidLabelmapConfig };
1
+ import type { LabelmapStyle } from '../../../types/LabelmapTypes';
2
+ declare function getDefaultLabelmapStyle(): LabelmapStyle;
3
+ export default getDefaultLabelmapStyle;
@@ -1,5 +1,6 @@
1
1
  const defaultLabelmapConfig = {
2
2
  renderOutline: true,
3
+ renderOutlineInactive: true,
3
4
  outlineWidthActive: 3,
4
5
  outlineWidthInactive: 2,
5
6
  activeSegmentOutlineWidthDelta: 0,
@@ -10,21 +11,7 @@ const defaultLabelmapConfig = {
10
11
  outlineOpacity: 1,
11
12
  outlineOpacityInactive: 0.85,
12
13
  };
13
- function getDefaultLabelmapConfig() {
14
+ function getDefaultLabelmapStyle() {
14
15
  return defaultLabelmapConfig;
15
16
  }
16
- function isValidLabelmapConfig(config) {
17
- return (config &&
18
- typeof config.renderOutline === 'boolean' &&
19
- typeof config.outlineWidthActive === 'number' &&
20
- typeof config.outlineWidthInactive === 'number' &&
21
- typeof config.activeSegmentOutlineWidthDelta === 'number' &&
22
- typeof config.renderFill === 'boolean' &&
23
- typeof config.renderFillInactive === 'boolean' &&
24
- typeof config.fillAlpha === 'number' &&
25
- typeof config.fillAlphaInactive === 'number' &&
26
- typeof config.outlineOpacity === 'number' &&
27
- typeof config.outlineOpacityInactive === 'number');
28
- }
29
- export default getDefaultLabelmapConfig;
30
- export { isValidLabelmapConfig };
17
+ export default getDefaultLabelmapStyle;
@@ -1,6 +1,6 @@
1
1
  import type { Types } from '@cornerstonejs/core';
2
2
  import type { LabelmapRepresentation } from '../../../types/SegmentationStateTypes';
3
- declare function removeRepresentation(viewportId: string, segmentationRepresentationUID: string, renderImmediate?: boolean): void;
3
+ declare function removeRepresentation(viewportId: string, segmentationId: string, renderImmediate?: boolean): void;
4
4
  declare function render(viewport: Types.IStackViewport | Types.IVolumeViewport, representation: LabelmapRepresentation): Promise<void>;
5
5
  declare const _default: {
6
6
  render: typeof render;
@@ -1,68 +1,50 @@
1
- import { cache, getEnabledElementByViewportId, StackViewport, VolumeViewport, } from '@cornerstonejs/core';
1
+ import { cache, getEnabledElementByViewportId, VolumeViewport, } from '@cornerstonejs/core';
2
2
  import Representations from '../../../enums/SegmentationRepresentations';
3
3
  import addLabelmapToElement from './addLabelmapToElement';
4
4
  import removeLabelmapFromElement from './removeLabelmapFromElement';
5
- import { isVolumeSegmentation } from '../../segmentation/strategies/utils/stackVolumeCheck';
6
5
  import { getHiddenSegmentIndices } from '../../../stateManagement/segmentation/config/segmentationVisibility';
7
- import { removeRepresentation as _removeRepresentation } from '../../../stateManagement/segmentation/removeRepresentation';
8
- import { getActiveSegmentationRepresentation } from '../../../stateManagement/segmentation/getActiveSegmentationRepresentation';
6
+ import { getActiveSegmentation } from '../../../stateManagement/segmentation/getActiveSegmentation';
9
7
  import { getColorLUT } from '../../../stateManagement/segmentation/getColorLUT';
10
8
  import { getCurrentLabelmapImageIdForViewport } from '../../../stateManagement/segmentation/getCurrentLabelmapImageIdForViewport';
11
- import { getGlobalConfig } from '../../../stateManagement/segmentation/getGlobalConfig';
12
9
  import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
13
10
  import { canComputeRequestedRepresentation } from '../../../stateManagement/segmentation/polySeg/canComputeRequestedRepresentation';
14
11
  import { computeAndAddLabelmapRepresentation } from '../../../stateManagement/segmentation/polySeg/Labelmap/computeAndAddLabelmapRepresentation';
12
+ import { getSegmentationActor } from '../../../stateManagement/segmentation/helpers';
13
+ import { segmentationStyle } from '../../../stateManagement/segmentation/SegmentationStyle';
14
+ import SegmentationRepresentations from '../../../enums/SegmentationRepresentations';
15
15
  const MAX_NUMBER_COLORS = 255;
16
16
  const labelMapConfigCache = new Map();
17
17
  let polySegConversionInProgress = false;
18
- function removeRepresentation(viewportId, segmentationRepresentationUID, renderImmediate = false) {
18
+ function removeRepresentation(viewportId, segmentationId, renderImmediate = false) {
19
19
  const enabledElement = getEnabledElementByViewportId(viewportId);
20
+ _cleanupLabelMapConfigCache(viewportId, segmentationId);
20
21
  if (!enabledElement) {
21
22
  return;
22
23
  }
23
24
  const { viewport } = enabledElement;
24
- removeLabelmapFromElement(viewport.element, segmentationRepresentationUID);
25
- _removeRepresentation(segmentationRepresentationUID);
25
+ removeLabelmapFromElement(viewport.element, segmentationId);
26
26
  if (!renderImmediate) {
27
27
  return;
28
28
  }
29
29
  viewport.render();
30
30
  }
31
- function isSameFrameOfReference(viewport, referencedVolumeId) {
32
- if (!referencedVolumeId) {
33
- return true;
34
- }
35
- const defaultActor = viewport.getDefaultActor();
36
- if (!defaultActor) {
37
- return false;
38
- }
39
- const { uid: defaultActorUID } = defaultActor;
40
- const volume = cache.getVolume(defaultActorUID);
41
- if (volume) {
42
- const referencedVolume = cache.getVolume(referencedVolumeId);
43
- if (referencedVolume &&
44
- volume.metadata.FrameOfReferenceUID ===
45
- referencedVolume.metadata.FrameOfReferenceUID) {
46
- return true;
47
- }
48
- }
49
- return false;
50
- }
51
31
  async function render(viewport, representation) {
52
- const { segmentationId, segmentationRepresentationUID } = representation;
32
+ const { segmentationId } = representation;
53
33
  const segmentation = getSegmentation(segmentationId);
54
34
  if (!segmentation) {
55
35
  console.warn('No segmentation found for segmentationId: ', segmentationId);
56
36
  return;
57
37
  }
58
38
  let labelmapData = segmentation.representationData[Representations.Labelmap];
59
- let actorEntry = viewport.getActor(segmentationRepresentationUID);
39
+ let labelmapActor = getSegmentationActor(viewport.id, {
40
+ segmentationId,
41
+ type: SegmentationRepresentations.Labelmap,
42
+ });
60
43
  if (!labelmapData &&
61
- canComputeRequestedRepresentation(segmentationRepresentationUID) &&
44
+ canComputeRequestedRepresentation(segmentationId, Representations.Labelmap) &&
62
45
  !polySegConversionInProgress) {
63
46
  polySegConversionInProgress = true;
64
47
  labelmapData = await computeAndAddLabelmapRepresentation(segmentationId, {
65
- segmentationRepresentationUID,
66
48
  viewport,
67
49
  });
68
50
  if (!labelmapData) {
@@ -73,71 +55,70 @@ async function render(viewport, representation) {
73
55
  if (!labelmapData) {
74
56
  return;
75
57
  }
76
- if (isVolumeSegmentation(labelmapData, viewport)) {
77
- if (viewport instanceof StackViewport) {
78
- return;
79
- }
80
- const { volumeId: labelmapUID } = labelmapData;
81
- const labelmap = cache.getVolume(labelmapUID);
82
- if (!labelmap) {
83
- throw new Error(`No Labelmap found for volumeId: ${labelmapUID}`);
84
- }
85
- if (!isSameFrameOfReference(viewport, labelmapData?.referencedVolumeId)) {
86
- return;
87
- }
88
- if (!actorEntry) {
89
- await _addLabelmapToViewport(viewport, labelmapData, segmentationRepresentationUID);
58
+ if (viewport instanceof VolumeViewport) {
59
+ if (!labelmapActor) {
60
+ await _addLabelmapToViewport(viewport, labelmapData, segmentationId);
90
61
  }
91
- actorEntry = viewport.getActor(segmentationRepresentationUID);
62
+ labelmapActor = getSegmentationActor(viewport.id, {
63
+ segmentationId,
64
+ type: SegmentationRepresentations.Labelmap,
65
+ });
92
66
  }
93
67
  else {
94
- if (viewport instanceof VolumeViewport) {
95
- return;
96
- }
97
68
  const labelmapImageId = getCurrentLabelmapImageIdForViewport(viewport.id, segmentationId);
98
69
  if (!labelmapImageId) {
99
70
  return;
100
71
  }
101
- if (!actorEntry) {
102
- await _addLabelmapToViewport(viewport, labelmapData, segmentationRepresentationUID);
72
+ if (!labelmapActor) {
73
+ await _addLabelmapToViewport(viewport, labelmapData, segmentationId);
103
74
  }
104
- actorEntry = viewport.getActor(segmentationRepresentationUID);
75
+ labelmapActor = getSegmentationActor(viewport.id, {
76
+ segmentationId,
77
+ type: SegmentationRepresentations.Labelmap,
78
+ });
105
79
  }
106
- if (!actorEntry) {
80
+ if (!labelmapActor) {
107
81
  return;
108
82
  }
109
- _setLabelmapColorAndOpacity(viewport.id, actorEntry, representation);
83
+ _setLabelmapColorAndOpacity(viewport.id, labelmapActor, representation);
110
84
  }
111
- function _setLabelmapColorAndOpacity(viewportId, actorEntry, segmentationRepresentation) {
112
- const { rendering, config, colorLUTIndex } = segmentationRepresentation;
113
- const activeSegRep = getActiveSegmentationRepresentation(viewportId);
114
- const isActiveLabelmap = activeSegRep === segmentationRepresentation;
115
- const { cfun, ofun } = rendering;
116
- const { allSegments, perSegment } = config;
117
- const globalLabelmapConfig = getGlobalConfig().representations[Representations.Labelmap];
118
- const globalConfig = getGlobalConfig();
119
- const renderInactiveRepresentations = globalConfig.renderInactiveRepresentations;
120
- const configToUse = {
121
- ...globalLabelmapConfig,
122
- ...allSegments[Representations.Labelmap],
123
- };
124
- const labelmapConfig = configToUse;
85
+ function _setLabelmapColorAndOpacity(viewportId, labelmapActor, segmentationRepresentation) {
86
+ const { segmentationId } = segmentationRepresentation;
87
+ const { cfun, ofun, colorLUTIndex } = segmentationRepresentation.config;
88
+ const activeSegmentation = getActiveSegmentation(viewportId);
89
+ const isActiveLabelmap = activeSegmentation?.segmentationId === segmentationId;
90
+ const { style: labelmapStyle, renderInactiveSegmentations } = segmentationStyle.getStyle({
91
+ viewportId,
92
+ type: Representations.Labelmap,
93
+ segmentationId,
94
+ });
125
95
  const colorLUT = getColorLUT(colorLUTIndex);
126
96
  const numColors = Math.min(256, colorLUT.length);
127
- const { uid: actorUID } = actorEntry;
128
- const { outlineWidth, renderOutline, outlineOpacity, activeSegmentOutlineWidthDelta, } = _getLabelmapConfig(labelmapConfig, isActiveLabelmap);
129
- const segmentsHidden = getHiddenSegmentIndices(viewportId, segmentationRepresentation.segmentationRepresentationUID);
97
+ const { outlineWidth, renderOutline, outlineOpacity, activeSegmentOutlineWidthDelta, } = _getLabelmapConfig(labelmapStyle, isActiveLabelmap);
98
+ const segmentsHidden = getHiddenSegmentIndices(viewportId, {
99
+ segmentationId,
100
+ type: Representations.Labelmap,
101
+ });
130
102
  for (let i = 0; i < numColors; i++) {
131
103
  const segmentIndex = i;
132
104
  const segmentColor = colorLUT[segmentIndex];
133
- const segmentSpecificLabelmapConfig = perSegment?.[segmentIndex]?.[Representations.Labelmap];
134
- const { fillAlpha, outlineWidth, renderFill, renderOutline } = _getLabelmapConfig(labelmapConfig, isActiveLabelmap, segmentSpecificLabelmapConfig);
135
- const { forceOpacityUpdate, forceColorUpdate } = _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, {
105
+ const { style: perSegmentStyle } = segmentationStyle.getStyle({
106
+ viewportId,
107
+ type: Representations.Labelmap,
108
+ segmentationId,
109
+ segmentIndex,
110
+ });
111
+ const segmentSpecificLabelmapConfig = perSegmentStyle;
112
+ const { fillAlpha, outlineWidth, renderFill, renderOutline } = _getLabelmapConfig(labelmapStyle, isActiveLabelmap, segmentSpecificLabelmapConfig);
113
+ const { forceOpacityUpdate, forceColorUpdate } = _needsTransferFunctionUpdate(viewportId, segmentationId, segmentIndex, {
136
114
  fillAlpha,
137
115
  renderFill,
138
116
  renderOutline,
139
117
  segmentColor,
140
118
  outlineWidth,
119
+ segmentsHidden,
120
+ cfun,
121
+ ofun,
141
122
  });
142
123
  if (forceColorUpdate) {
143
124
  cfun.addRGBPoint(segmentIndex, segmentColor[0] / MAX_NUMBER_COLORS, segmentColor[1] / MAX_NUMBER_COLORS, segmentColor[2] / MAX_NUMBER_COLORS);
@@ -155,13 +136,12 @@ function _setLabelmapColorAndOpacity(viewportId, actorEntry, segmentationReprese
155
136
  }
156
137
  }
157
138
  }
158
- const actor = actorEntry.actor;
159
- actor.getProperty().setRGBTransferFunction(0, cfun);
139
+ labelmapActor.getProperty().setRGBTransferFunction(0, cfun);
160
140
  ofun.setClamping(false);
161
- actor.getProperty().setScalarOpacity(0, ofun);
162
- actor.getProperty().setInterpolationTypeToNearest();
163
- actor.getProperty().setUseLabelOutline(renderOutline);
164
- actor.getProperty().setLabelOutlineOpacity(outlineOpacity);
141
+ labelmapActor.getProperty().setScalarOpacity(0, ofun);
142
+ labelmapActor.getProperty().setInterpolationTypeToNearest();
143
+ labelmapActor.getProperty().setUseLabelOutline(renderOutline);
144
+ labelmapActor.getProperty().setLabelOutlineOpacity(outlineOpacity);
165
145
  const { activeSegmentIndex } = getSegmentation(segmentationRepresentation.segmentationId);
166
146
  const outlineWidths = new Array(numColors - 1);
167
147
  for (let i = 1; i < numColors; i++) {
@@ -175,9 +155,9 @@ function _setLabelmapColorAndOpacity(viewportId, actorEntry, segmentationReprese
175
155
  ? outlineWidth + activeSegmentOutlineWidthDelta
176
156
  : outlineWidth;
177
157
  }
178
- actor.getProperty().setLabelOutlineThickness(outlineWidths);
179
- const visible = isActiveLabelmap || renderInactiveRepresentations;
180
- actor.setVisibility(visible);
158
+ labelmapActor.getProperty().setLabelOutlineThickness(outlineWidths);
159
+ const visible = isActiveLabelmap || renderInactiveSegmentations;
160
+ labelmapActor.setVisibility(visible);
181
161
  }
182
162
  function _getLabelmapConfig(labelmapConfig, isActiveLabelmap, segmentsLabelmapConfig) {
183
163
  const segmentLabelmapConfig = segmentsLabelmapConfig || {};
@@ -194,7 +174,9 @@ function _getLabelmapConfig(labelmapConfig, isActiveLabelmap, segmentsLabelmapCo
194
174
  const renderFill = isActiveLabelmap
195
175
  ? configToUse.renderFill
196
176
  : configToUse.renderFillInactive;
197
- const renderOutline = configToUse.renderOutline;
177
+ const renderOutline = isActiveLabelmap
178
+ ? configToUse.renderOutline
179
+ : configToUse.renderOutlineInactive;
198
180
  const outlineOpacity = isActiveLabelmap
199
181
  ? configToUse.outlineOpacity
200
182
  : configToUse.outlineOpacityInactive;
@@ -208,7 +190,7 @@ function _getLabelmapConfig(labelmapConfig, isActiveLabelmap, segmentsLabelmapCo
208
190
  activeSegmentOutlineWidthDelta,
209
191
  };
210
192
  }
211
- function _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, { fillAlpha, renderFill, renderOutline, segmentColor, outlineWidth, }) {
193
+ function _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, { fillAlpha, renderFill, renderOutline, segmentColor, outlineWidth, segmentsHidden, cfun, ofun, }) {
212
194
  const cacheUID = `${viewportId}-${actorUID}-${segmentIndex}`;
213
195
  const oldConfig = labelMapConfigCache.get(cacheUID);
214
196
  if (!oldConfig) {
@@ -218,13 +200,16 @@ function _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, { fill
218
200
  renderOutline,
219
201
  outlineWidth,
220
202
  segmentColor: segmentColor.slice(),
203
+ segmentsHidden: new Set(segmentsHidden),
204
+ cfunMTime: cfun.getMTime(),
205
+ ofunMTime: ofun.getMTime(),
221
206
  });
222
207
  return {
223
208
  forceOpacityUpdate: true,
224
209
  forceColorUpdate: true,
225
210
  };
226
211
  }
227
- const { fillAlpha: oldFillAlpha, renderFill: oldRenderFill, renderOutline: oldRenderOutline, outlineWidth: oldOutlineWidth, segmentColor: oldSegmentColor, } = oldConfig;
212
+ const { fillAlpha: oldFillAlpha, renderFill: oldRenderFill, renderOutline: oldRenderOutline, outlineWidth: oldOutlineWidth, segmentColor: oldSegmentColor, segmentsHidden: oldSegmentsHidden, cfunMTime: oldCfunMTime, ofunMTime: oldOfunMTime, } = oldConfig;
228
213
  const forceColorUpdate = oldSegmentColor[0] !== segmentColor[0] ||
229
214
  oldSegmentColor[1] !== segmentColor[1] ||
230
215
  oldSegmentColor[2] !== segmentColor[2];
@@ -232,7 +217,8 @@ function _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, { fill
232
217
  oldFillAlpha !== fillAlpha ||
233
218
  oldRenderFill !== renderFill ||
234
219
  oldRenderOutline !== renderOutline ||
235
- oldOutlineWidth !== outlineWidth;
220
+ oldOutlineWidth !== outlineWidth ||
221
+ oldSegmentsHidden !== segmentsHidden;
236
222
  if (forceOpacityUpdate || forceColorUpdate) {
237
223
  labelMapConfigCache.set(cacheUID, {
238
224
  fillAlpha,
@@ -240,6 +226,9 @@ function _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, { fill
240
226
  renderOutline,
241
227
  outlineWidth,
242
228
  segmentColor: segmentColor.slice(),
229
+ segmentsHidden: new Set(segmentsHidden),
230
+ cfunMTime: cfun.getMTime(),
231
+ ofunMTime: ofun.getMTime(),
243
232
  });
244
233
  }
245
234
  return {
@@ -247,8 +236,15 @@ function _needsTransferFunctionUpdate(viewportId, actorUID, segmentIndex, { fill
247
236
  forceColorUpdate,
248
237
  };
249
238
  }
250
- async function _addLabelmapToViewport(viewport, labelmapData, segmentationRepresentationUID) {
251
- await addLabelmapToElement(viewport.element, labelmapData, segmentationRepresentationUID);
239
+ async function _addLabelmapToViewport(viewport, labelmapData, segmentationId) {
240
+ await addLabelmapToElement(viewport.element, labelmapData, segmentationId);
241
+ }
242
+ function _cleanupLabelMapConfigCache(viewportId, segmentationId) {
243
+ for (const key of labelMapConfigCache.keys()) {
244
+ if (key.startsWith(`${viewportId}-${segmentationId}-`)) {
245
+ labelMapConfigCache.delete(key);
246
+ }
247
+ }
252
248
  }
253
249
  export default {
254
250
  render,
@@ -1,2 +1,2 @@
1
- declare function removeLabelmapFromElement(element: HTMLDivElement, segmentationRepresentationUID: string, removeFromCache?: boolean): void;
1
+ declare function removeLabelmapFromElement(element: HTMLDivElement, segmentationId: string): void;
2
2
  export default removeLabelmapFromElement;
@@ -1,7 +1,8 @@
1
1
  import { getEnabledElement } from '@cornerstonejs/core';
2
- function removeLabelmapFromElement(element, segmentationRepresentationUID, removeFromCache = false) {
2
+ import { getLabelmapActorUID } from '../../../stateManagement/segmentation/helpers/getSegmentationActor';
3
+ function removeLabelmapFromElement(element, segmentationId) {
3
4
  const enabledElement = getEnabledElement(element);
4
5
  const { viewport } = enabledElement;
5
- viewport.removeActors([segmentationRepresentationUID]);
6
+ viewport.removeActors([getLabelmapActorUID(segmentationId)]);
6
7
  }
7
8
  export default removeLabelmapFromElement;
@@ -1,3 +1,3 @@
1
1
  import type { Types } from '@cornerstonejs/core';
2
- declare function addOrUpdateSurfaceToElement(element: HTMLDivElement, surface: Types.ISurface, segmentationRepresentationUID: string): void;
2
+ declare function addOrUpdateSurfaceToElement(element: HTMLDivElement, surface: Types.ISurface, segmentationId: string): void;
3
3
  export default addOrUpdateSurfaceToElement;