@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.
- package/dist/esm/eventListeners/index.d.ts +2 -2
- package/dist/esm/eventListeners/index.js +2 -2
- package/dist/esm/eventListeners/mouse/mouseDownListener.js +8 -0
- package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +18 -12
- package/dist/esm/eventListeners/segmentation/index.d.ts +1 -3
- package/dist/esm/eventListeners/segmentation/index.js +1 -3
- package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.js +13 -10
- package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +2 -3
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/init.js +1 -5
- package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.d.ts +2 -0
- package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +6 -5
- package/dist/esm/stateManagement/annotation/annotationState.js +11 -2
- package/dist/esm/stateManagement/index.d.ts +1 -4
- package/dist/esm/stateManagement/index.js +1 -3
- package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +9 -6
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +43 -25
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +207 -162
- package/dist/esm/stateManagement/segmentation/SegmentationStyle.d.ts +42 -0
- package/dist/esm/stateManagement/segmentation/SegmentationStyle.js +162 -0
- package/dist/esm/stateManagement/segmentation/activeSegmentation.d.ts +4 -5
- package/dist/esm/stateManagement/segmentation/activeSegmentation.js +10 -14
- package/dist/esm/stateManagement/segmentation/addColorLUT.d.ts +2 -2
- package/dist/esm/stateManagement/segmentation/addColorLUT.js +15 -1
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationsToViewport.d.ts +15 -0
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationsToViewport.js +49 -0
- package/dist/esm/stateManagement/segmentation/addSegmentations.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/addSegmentations.js +11 -7
- package/dist/esm/stateManagement/segmentation/config/index.d.ts +2 -2
- package/dist/esm/stateManagement/segmentation/config/index.js +2 -2
- package/dist/esm/stateManagement/segmentation/config/segmentationColor.d.ts +4 -4
- package/dist/esm/stateManagement/segmentation/config/segmentationColor.js +24 -24
- package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.d.ts +22 -7
- package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +29 -29
- package/dist/esm/stateManagement/segmentation/config/styleHelpers.d.ts +39 -0
- package/dist/esm/stateManagement/segmentation/config/styleHelpers.js +48 -0
- package/dist/esm/stateManagement/segmentation/getActiveSegmentation.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/{getGlobalConfig.js → getActiveSegmentation.js} +2 -2
- package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/getGlobalStyle.d.ts +3 -0
- package/dist/esm/stateManagement/segmentation/getGlobalStyle.js +4 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.d.ts +9 -1
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.js +10 -2
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.d.ts +5 -1
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.js +2 -2
- package/dist/esm/stateManagement/segmentation/getViewportIdsWithSegmentation.js +5 -5
- package/dist/esm/stateManagement/segmentation/getViewportSegmentations.d.ts +3 -0
- package/dist/esm/stateManagement/segmentation/getViewportSegmentations.js +15 -0
- package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.js +31 -0
- package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.d.ts +1 -2
- package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.js +4 -6
- package/dist/esm/stateManagement/segmentation/{convertVolumeToStackSegmentation.d.ts → helpers/computeStackLabelmapFromVolume.d.ts} +2 -2
- package/dist/esm/stateManagement/segmentation/{convertVolumeToStackSegmentation.js → helpers/computeStackLabelmapFromVolume.js} +8 -5
- package/dist/esm/stateManagement/segmentation/helpers/computeVolumeLabelmapFromStack.d.ts +3 -0
- package/dist/esm/stateManagement/segmentation/helpers/computeVolumeLabelmapFromStack.js +4 -0
- package/dist/esm/stateManagement/segmentation/helpers/convertStackToVolumeLabelmap.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/helpers/convertStackToVolumeLabelmap.js +7 -0
- package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.d.ts +8 -0
- package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.js +27 -0
- package/dist/esm/stateManagement/segmentation/helpers/index.d.ts +2 -1
- package/dist/esm/stateManagement/segmentation/helpers/index.js +2 -1
- package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +4 -6
- package/dist/esm/stateManagement/segmentation/helpers/updateStackSegmentationState.js +1 -1
- package/dist/esm/stateManagement/segmentation/index.d.ts +14 -7
- package/dist/esm/stateManagement/segmentation/index.js +14 -7
- package/dist/esm/stateManagement/segmentation/{addRepresentationData.d.ts → internalAddRepresentationData.d.ts} +2 -2
- package/dist/esm/stateManagement/segmentation/{addRepresentationData.js → internalAddRepresentationData.js} +5 -2
- package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.js +18 -58
- package/dist/esm/stateManagement/segmentation/polySeg/Contour/contourComputationStrategies.js +9 -10
- package/dist/esm/stateManagement/segmentation/polySeg/Contour/utils/extractContourData.js +8 -5
- package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/computeAndAddLabelmapRepresentation.js +9 -2
- package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertContourToLabelmap.js +2 -2
- package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/labelmapComputationStrategies.js +4 -6
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.js +4 -4
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/createAndCacheSurfacesFromRaw.js +1 -7
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/surfaceComputationStrategies.js +1 -3
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/updateSurfaceData.js +9 -8
- package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.d.ts +2 -1
- package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.js +3 -9
- package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.js +7 -5
- package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.d.ts +14 -2
- package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +69 -19
- package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +6 -18
- package/dist/esm/stateManagement/segmentation/segmentationState.js +9 -18
- package/dist/esm/stateManagement/segmentation/setActiveSegmentation.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/setActiveSegmentation.js +5 -0
- package/dist/esm/stateManagement/segmentation/setGlobalStyle.d.ts +3 -0
- package/dist/esm/stateManagement/segmentation/setGlobalStyle.js +8 -0
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.d.ts +5 -1
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.js +2 -2
- package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.d.ts +1 -3
- package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.js +1 -3
- package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +2 -1
- package/dist/esm/store/ToolGroupManager/ToolGroup.js +23 -9
- package/dist/esm/store/ToolGroupManager/createToolGroup.d.ts +1 -1
- package/dist/esm/store/ToolGroupManager/createToolGroup.js +3 -3
- package/dist/esm/tools/AdvancedMagnifyTool.js +1 -1
- package/dist/esm/tools/CrosshairsTool.js +1 -2
- package/dist/esm/tools/MIPJumpToClickTool.js +1 -1
- package/dist/esm/tools/ReferenceLinesTool.js +5 -2
- package/dist/esm/tools/StackScrollTool.d.ts +4 -0
- package/dist/esm/tools/StackScrollTool.js +104 -15
- package/dist/esm/tools/WindowLevelTool.js +3 -2
- package/dist/esm/tools/annotation/AngleTool.js +1 -1
- package/dist/esm/tools/annotation/BidirectionalTool.js +1 -1
- package/dist/esm/tools/annotation/CircleROITool.js +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js +1 -1
- package/dist/esm/tools/annotation/HeightTool.js +1 -1
- package/dist/esm/tools/annotation/LengthTool.js +1 -1
- package/dist/esm/tools/annotation/LivewireContourTool.js +3 -3
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +1 -1
- package/dist/esm/tools/annotation/ProbeTool.js +2 -2
- package/dist/esm/tools/annotation/RectangleROITool.js +1 -1
- package/dist/esm/tools/annotation/SplineROITool.js +2 -3
- package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +1 -1
- package/dist/esm/tools/base/BaseTool.d.ts +1 -2
- package/dist/esm/tools/base/BaseTool.js +5 -18
- package/dist/esm/tools/base/ContourSegmentationBaseTool.js +28 -25
- package/dist/esm/tools/displayTools/Contour/contourConfig.d.ts +3 -3
- package/dist/esm/tools/displayTools/Contour/contourConfig.js +2 -2
- package/dist/esm/tools/displayTools/Contour/contourDisplay.d.ts +1 -1
- package/dist/esm/tools/displayTools/Contour/contourDisplay.js +4 -7
- package/dist/esm/tools/displayTools/Contour/contourHandler/handleContourSegmentation.js +26 -57
- package/dist/esm/tools/displayTools/Contour/removeContourFromElement.d.ts +1 -1
- package/dist/esm/tools/displayTools/Contour/removeContourFromElement.js +2 -4
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +1 -1
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +39 -10
- package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.d.ts +3 -5
- package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.js +3 -16
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +86 -90
- package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.d.ts +1 -1
- package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +3 -2
- package/dist/esm/tools/displayTools/Surface/addOrUpdateSurfaceToElement.d.ts +1 -1
- package/dist/esm/tools/displayTools/Surface/addOrUpdateSurfaceToElement.js +3 -3
- package/dist/esm/tools/displayTools/Surface/removeSurfaceFromElement.d.ts +2 -2
- package/dist/esm/tools/displayTools/Surface/removeSurfaceFromElement.js +5 -3
- package/dist/esm/tools/displayTools/Surface/surfaceConfig.d.ts +3 -3
- package/dist/esm/tools/displayTools/Surface/surfaceConfig.js +2 -2
- package/dist/esm/tools/displayTools/Surface/surfaceDisplay.d.ts +1 -1
- package/dist/esm/tools/displayTools/Surface/surfaceDisplay.js +7 -8
- package/dist/esm/tools/index.d.ts +1 -2
- package/dist/esm/tools/index.js +1 -2
- package/dist/esm/tools/segmentation/BrushTool.d.ts +0 -4
- package/dist/esm/tools/segmentation/BrushTool.js +23 -22
- package/dist/esm/tools/segmentation/CircleROIStartEndThresholdTool.js +2 -2
- package/dist/esm/tools/segmentation/CircleScissorsTool.d.ts +1 -1
- package/dist/esm/tools/segmentation/CircleScissorsTool.js +11 -10
- package/dist/esm/tools/segmentation/PaintFillTool.js +5 -7
- package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +2 -2
- package/dist/esm/tools/segmentation/RectangleScissorsTool.d.ts +0 -1
- package/dist/esm/tools/segmentation/RectangleScissorsTool.js +9 -10
- package/dist/esm/tools/segmentation/SegmentSelectTool.d.ts +2 -2
- package/dist/esm/tools/segmentation/SegmentSelectTool.js +17 -26
- package/dist/esm/tools/segmentation/SphereScissorsTool.d.ts +0 -1
- package/dist/esm/tools/segmentation/SphereScissorsTool.js +6 -9
- package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +2 -0
- package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +2 -0
- package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +1 -2
- package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +1 -1
- package/dist/esm/tools/segmentation/strategies/compositions/preview.js +3 -3
- package/dist/esm/tools/segmentation/strategies/compositions/regionFill.js +4 -4
- package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +1 -1
- package/dist/esm/tools/segmentation/strategies/fillCircle.js +3 -3
- package/dist/esm/tools/segmentation/strategies/fillSphere.js +3 -3
- package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +21 -6
- package/dist/esm/types/AnnotationGroupSelector.js +0 -1
- package/dist/esm/types/AnnotationRenderContext.js +0 -1
- package/dist/esm/types/AnnotationStyle.js +0 -1
- package/dist/esm/types/AnnotationTypes.js +0 -1
- package/dist/esm/types/BoundsIJK.js +0 -1
- package/dist/esm/types/CINETypes.js +0 -1
- package/dist/esm/types/CalculatorTypes.js +0 -1
- package/dist/esm/types/CardinalSplineProps.js +0 -1
- package/dist/esm/types/ClosestControlPoint.js +0 -1
- package/dist/esm/types/ClosestPoint.js +0 -1
- package/dist/esm/types/ClosestSplinePoint.js +0 -1
- package/dist/esm/types/ContourSegmentationAnnotation.js +0 -1
- package/dist/esm/types/ContourTypes.d.ts +1 -2
- package/dist/esm/types/ContourTypes.js +0 -1
- package/dist/esm/types/ControlPointInfo.js +0 -1
- package/dist/esm/types/CursorTypes.js +0 -1
- package/dist/esm/types/EventTypes.d.ts +2 -2
- package/dist/esm/types/EventTypes.js +0 -1
- package/dist/esm/types/FloodFillTypes.js +0 -1
- package/dist/esm/types/IAnnotationManager.js +0 -1
- package/dist/esm/types/IBaseTool.js +0 -1
- package/dist/esm/types/IDistance.js +0 -1
- package/dist/esm/types/IPoints.js +0 -1
- package/dist/esm/types/ISculptToolShape.js +0 -1
- package/dist/esm/types/ISetToolModeOptions.js +0 -1
- package/dist/esm/types/ISpline.js +0 -1
- package/dist/esm/types/ISynchronizerEventHandler.js +0 -1
- package/dist/esm/types/IToolClassReference.js +0 -1
- package/dist/esm/types/IToolGroup.js +0 -1
- package/dist/esm/types/ITouchPoints.js +0 -1
- package/dist/esm/types/InteractionTypes.js +0 -1
- package/dist/esm/types/InternalToolTypes.js +0 -1
- package/dist/esm/types/InterpolationTypes.js +0 -1
- package/dist/esm/types/JumpToSliceOptions.js +0 -1
- package/dist/esm/types/LabelmapToolOperationData.d.ts +0 -1
- package/dist/esm/types/LabelmapToolOperationData.js +0 -1
- package/dist/esm/types/LabelmapTypes.d.ts +3 -7
- package/dist/esm/types/LabelmapTypes.js +0 -1
- package/dist/esm/types/PlanarBoundingBox.js +0 -1
- package/dist/esm/types/PolySeg.d.ts +1 -1
- package/dist/esm/types/PolySeg.js +0 -1
- package/dist/esm/types/SVGDrawingHelper.js +0 -1
- package/dist/esm/types/ScrollOptions.js +0 -1
- package/dist/esm/types/SegmentationStateTypes.d.ts +35 -56
- package/dist/esm/types/SegmentationStateTypes.js +0 -1
- package/dist/esm/types/SplineCurveSegment.js +0 -1
- package/dist/esm/types/SplineLineSegment.js +0 -1
- package/dist/esm/types/SplineProps.js +0 -1
- package/dist/esm/types/SurfaceTypes.d.ts +1 -1
- package/dist/esm/types/SurfaceTypes.js +0 -1
- package/dist/esm/types/ToolAction.js +0 -1
- package/dist/esm/types/ToolHandle.js +0 -1
- package/dist/esm/types/ToolProps.js +0 -1
- package/dist/esm/types/ToolSpecificAnnotationTypes.js +0 -1
- package/dist/esm/types/index.d.ts +2 -2
- package/dist/esm/types/index.js +0 -1
- package/dist/esm/utilities/cine/playClip.js +1 -1
- package/dist/esm/utilities/contours/updateContourPolyline.js +3 -0
- package/dist/esm/utilities/index.d.ts +2 -1
- package/dist/esm/utilities/index.js +2 -1
- package/dist/esm/utilities/math/circle/_types.js +0 -1
- package/dist/esm/utilities/math/polyline/planarFreehandROIInternalTypes.js +0 -1
- package/dist/esm/utilities/pointInSurroundingSphereCallback.d.ts +8 -0
- package/dist/esm/utilities/pointInSurroundingSphereCallback.js +71 -0
- package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +2 -2
- package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +10 -9
- package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +9 -8
- package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +14 -16
- package/dist/esm/utilities/segmentation/index.d.ts +1 -3
- package/dist/esm/utilities/segmentation/index.js +1 -3
- package/dist/esm/utilities/voi/colorbar/ColorbarCanvas.js +3 -0
- package/dist/esm/utilities/voi/colorbar/ViewportColorbar.js +1 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarCanvasProps.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarCommonProps.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarImageRange.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarProps.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarSize.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarTicksProps.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarTicksStyle.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ColorbarVOIRange.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/ViewportColorbarProps.js +0 -1
- package/dist/esm/utilities/voi/colorbar/types/index.js +0 -1
- package/dist/esm/widgets/types/WidgetProps.js +0 -1
- package/dist/esm/widgets/types/WidgetSize.js +0 -1
- package/dist/esm/widgets/types/index.js +0 -1
- package/dist/esm/workers/polySegConverters.js +4 -3
- package/package.json +73 -20
- package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.d.ts +0 -3
- package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.js +0 -14
- package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.d.ts +0 -3
- package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.js +0 -8
- package/dist/esm/stateManagement/segmentation/addSegmentation.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/addSegmentation.js +0 -11
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.js +0 -10
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentations.d.ts +0 -8
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentations.js +0 -19
- package/dist/esm/stateManagement/segmentation/config/segmentationConfig.d.ts +0 -14
- package/dist/esm/stateManagement/segmentation/config/segmentationConfig.js +0 -54
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.d.ts +0 -1
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.js +0 -8
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.d.ts +0 -1
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.js +0 -8
- package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.js +0 -5
- package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.js +0 -6
- package/dist/esm/stateManagement/segmentation/getGlobalConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.js +0 -5
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.js +0 -5
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.d.ts +0 -7
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.js +0 -6
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.js +0 -12
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.js +0 -5
- package/dist/esm/stateManagement/segmentation/removeRepresentation.d.ts +0 -1
- package/dist/esm/stateManagement/segmentation/removeRepresentation.js +0 -9
- package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.d.ts +0 -1
- package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.js +0 -9
- package/dist/esm/stateManagement/segmentation/setGlobalConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/setGlobalConfig.js +0 -9
- package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.js +0 -9
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.js +0 -9
- package/dist/esm/tools/VolumeRotateMouseWheelTool.d.ts +0 -9
- package/dist/esm/tools/VolumeRotateMouseWheelTool.js +0 -52
- package/dist/esm/tools/displayTools/Contour/contourHandler/contourConfigCache.d.ts +0 -9
- package/dist/esm/tools/displayTools/Contour/contourHandler/contourConfigCache.js +0 -10
- package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +0 -5
- package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js +0 -13
- package/dist/esm/utilities/segmentation/getDefaultRepresentationConfig.d.ts +0 -2
- package/dist/esm/utilities/segmentation/getDefaultRepresentationConfig.js +0 -11
- package/dist/esm/utilities/segmentation/isValidRepresentationConfig.d.ts +0 -2
- package/dist/esm/utilities/segmentation/isValidRepresentationConfig.js +0 -10
- package/dist/umd/17dd54813d5acc10bf8f.wasm +0 -0
- package/dist/umd/78.index.js +0 -3
- package/dist/umd/78.index.js.LICENSE.txt +0 -5
- package/dist/umd/78.index.js.map +0 -1
- package/dist/umd/985.index.js +0 -2
- package/dist/umd/985.index.js.map +0 -1
- package/dist/umd/index.js +0 -3
- package/dist/umd/index.js.LICENSE.txt +0 -6
- 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,
|
|
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(
|
|
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 {
|
|
7
|
+
import { SegmentationRepresentations } from '../../../../enums';
|
|
8
|
+
import { segmentationStyle } from '../../../../stateManagement/segmentation/SegmentationStyle';
|
|
10
9
|
function handleContourSegmentation(viewport, geometryIds, annotationUIDsMap, contourRepresentation) {
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
segmentsToSetToVisible.push(segmentIndex);
|
|
39
|
-
}
|
|
13
|
+
else {
|
|
14
|
+
addContourSetsToElement(viewport, geometryIds, contourRepresentation);
|
|
40
15
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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 =
|
|
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 {
|
|
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 =
|
|
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
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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(
|
|
1
|
+
declare function removeContourFromElement(viewportId: string, segmentationId: string, removeFromCache?: boolean): void;
|
|
2
2
|
export default removeContourFromElement;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
|
|
2
2
|
import { removeAnnotation } from '../../../stateManagement';
|
|
3
|
-
function removeContourFromElement(
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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
|
|
16
|
-
actorUID:
|
|
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
|
|
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:
|
|
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 {
|
|
2
|
-
declare function
|
|
3
|
-
|
|
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
|
|
14
|
+
function getDefaultLabelmapStyle() {
|
|
14
15
|
return defaultLabelmapConfig;
|
|
15
16
|
}
|
|
16
|
-
|
|
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,
|
|
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,
|
|
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 {
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
39
|
+
let labelmapActor = getSegmentationActor(viewport.id, {
|
|
40
|
+
segmentationId,
|
|
41
|
+
type: SegmentationRepresentations.Labelmap,
|
|
42
|
+
});
|
|
60
43
|
if (!labelmapData &&
|
|
61
|
-
canComputeRequestedRepresentation(
|
|
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 (
|
|
77
|
-
if (
|
|
78
|
-
|
|
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
|
-
|
|
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 (!
|
|
102
|
-
await _addLabelmapToViewport(viewport, labelmapData,
|
|
72
|
+
if (!labelmapActor) {
|
|
73
|
+
await _addLabelmapToViewport(viewport, labelmapData, segmentationId);
|
|
103
74
|
}
|
|
104
|
-
|
|
75
|
+
labelmapActor = getSegmentationActor(viewport.id, {
|
|
76
|
+
segmentationId,
|
|
77
|
+
type: SegmentationRepresentations.Labelmap,
|
|
78
|
+
});
|
|
105
79
|
}
|
|
106
|
-
if (!
|
|
80
|
+
if (!labelmapActor) {
|
|
107
81
|
return;
|
|
108
82
|
}
|
|
109
|
-
_setLabelmapColorAndOpacity(viewport.id,
|
|
83
|
+
_setLabelmapColorAndOpacity(viewport.id, labelmapActor, representation);
|
|
110
84
|
}
|
|
111
|
-
function _setLabelmapColorAndOpacity(viewportId,
|
|
112
|
-
const {
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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 {
|
|
128
|
-
const
|
|
129
|
-
|
|
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
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
159
|
-
actor.getProperty().setRGBTransferFunction(0, cfun);
|
|
139
|
+
labelmapActor.getProperty().setRGBTransferFunction(0, cfun);
|
|
160
140
|
ofun.setClamping(false);
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
-
|
|
179
|
-
const visible = isActiveLabelmap ||
|
|
180
|
-
|
|
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 =
|
|
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,
|
|
251
|
-
await addLabelmapToElement(viewport.element, labelmapData,
|
|
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,
|
|
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
|
-
|
|
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([
|
|
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,
|
|
2
|
+
declare function addOrUpdateSurfaceToElement(element: HTMLDivElement, surface: Types.ISurface, segmentationId: string): void;
|
|
3
3
|
export default addOrUpdateSurfaceToElement;
|