@cornerstonejs/tools 2.0.0-beta.21 → 2.0.0-beta.23
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/cursors/elementCursor.d.ts +1 -1
- package/dist/esm/cursors/elementCursor.js +1 -1
- package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
- package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.js +2 -2
- package/dist/esm/eventDispatchers/keyboardEventHandlers/keyUp.js +2 -2
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownActivate.js +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDrag.js +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseMove.js +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseWheel.js +1 -1
- package/dist/esm/eventDispatchers/shared/customCallbackHandler.js +3 -2
- package/dist/esm/eventDispatchers/shared/getActiveToolForKeyboardEvent.js +2 -2
- package/dist/esm/eventDispatchers/shared/getActiveToolForMouseEvent.js +2 -2
- package/dist/esm/eventDispatchers/shared/getActiveToolForTouchEvent.js +3 -3
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.js +2 -2
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +2 -2
- package/dist/esm/eventDispatchers/shared/getToolsWithModesForMouseEvent.js +2 -2
- package/dist/esm/eventDispatchers/shared/getToolsWithModesForTouchEvent.js +2 -2
- package/dist/esm/eventDispatchers/touchEventHandlers/touchDrag.js +1 -1
- package/dist/esm/eventDispatchers/touchEventHandlers/touchStart.js +1 -1
- package/dist/esm/eventDispatchers/touchEventHandlers/touchStartActivate.js +1 -1
- package/dist/esm/eventListeners/annotations/annotationSelectionListener.js +1 -1
- package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +21 -20
- package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +8 -6
- package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +1 -1
- package/dist/esm/eventListeners/segmentation/segmentationModifiedEventListener.js +1 -1
- package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.js +1 -1
- package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.js +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/esm/init.js +2 -2
- package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +0 -2
- package/dist/esm/stateManagement/annotation/annotationSelection.js +1 -1
- package/dist/esm/stateManagement/annotation/annotationState.d.ts +2 -2
- package/dist/esm/stateManagement/annotation/annotationState.js +4 -6
- package/dist/esm/stateManagement/annotation/annotationVisibility.js +1 -1
- package/dist/esm/stateManagement/annotation/getAnnotation.d.ts +2 -0
- package/dist/esm/stateManagement/annotation/getAnnotation.js +6 -0
- package/dist/esm/stateManagement/index.d.ts +2 -2
- package/dist/esm/stateManagement/index.js +2 -1
- package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.d.ts +3 -1
- package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +13 -6
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +17 -1
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +46 -4
- package/dist/esm/stateManagement/segmentation/activeSegmentation.js +6 -4
- package/dist/esm/stateManagement/segmentation/addColorLUT.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/addColorLUT.js +5 -0
- package/dist/esm/stateManagement/segmentation/addRepresentationData.js +1 -1
- package/dist/esm/stateManagement/segmentation/addSegmentation.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/addSegmentation.js +11 -0
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentation.js +29 -8
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.js +10 -0
- package/dist/esm/stateManagement/segmentation/config/segmentationColor.js +8 -6
- package/dist/esm/stateManagement/segmentation/config/segmentationConfig.js +14 -9
- package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +8 -5
- package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.d.ts +0 -8
- package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.js +3 -33
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationDataModified.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationDataModified.js +11 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationModified.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationModified.js +18 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRemoved.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRemoved.js +8 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.js +8 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.js +8 -0
- package/dist/esm/stateManagement/segmentation/getActiveSegmentIndex.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/getActiveSegmentIndex.js +7 -0
- package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.js +5 -0
- package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.js +6 -0
- package/dist/esm/stateManagement/segmentation/getColorLUT.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getColorLUT.js +5 -0
- package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.js +5 -0
- package/dist/esm/stateManagement/segmentation/getGlobalConfig.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getGlobalConfig.js +5 -0
- package/dist/esm/stateManagement/segmentation/getNextColorLUTIndex.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/getNextColorLUTIndex.js +5 -0
- package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.js +5 -0
- package/dist/esm/stateManagement/segmentation/getSegmentation.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getSegmentation.js +5 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.js +5 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.js +5 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.d.ts +7 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.js +6 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.js +5 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.js +12 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.js +5 -0
- package/dist/esm/stateManagement/segmentation/getSegmentations.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/getSegmentations.js +6 -0
- package/dist/esm/stateManagement/segmentation/getViewportIdsWithSegmentation.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/getViewportIdsWithSegmentation.js +10 -0
- package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.js +1 -1
- package/dist/esm/stateManagement/segmentation/helpers/updateStackSegmentationState.d.ts +8 -0
- package/dist/esm/stateManagement/segmentation/helpers/updateStackSegmentationState.js +31 -0
- package/dist/esm/stateManagement/segmentation/index.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/index.js +1 -1
- package/dist/esm/stateManagement/segmentation/polySeg/Contour/contourComputationStrategies.js +3 -2
- package/dist/esm/stateManagement/segmentation/polySeg/Contour/utils/createAndAddContourSegmentationsFromClippedSurfaces.js +1 -1
- package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertContourToLabelmap.js +1 -1
- package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/labelmapComputationStrategies.js +3 -3
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.js +2 -3
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/createAndCacheSurfacesFromRaw.js +2 -1
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/surfaceComputationStrategies.js +2 -2
- package/dist/esm/stateManagement/segmentation/polySeg/Surface/updateSurfaceData.js +2 -3
- package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.js +3 -2
- package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.js +1 -1
- package/dist/esm/stateManagement/segmentation/removeColorLUT.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/removeColorLUT.js +5 -0
- package/dist/esm/stateManagement/segmentation/removeRepresentation.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/removeRepresentation.js +9 -0
- package/dist/esm/stateManagement/segmentation/removeSegmentation.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/removeSegmentation.js +7 -0
- package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +2 -2
- package/dist/esm/stateManagement/segmentation/segmentIndex.d.ts +2 -2
- package/dist/esm/stateManagement/segmentation/segmentIndex.js +5 -9
- package/dist/esm/stateManagement/segmentation/segmentLocking.js +1 -1
- package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +29 -38
- package/dist/esm/stateManagement/segmentation/segmentationState.js +29 -157
- package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.js +9 -0
- package/dist/esm/stateManagement/segmentation/setGlobalConfig.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/setGlobalConfig.js +9 -0
- package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.js +9 -0
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.d.ts +2 -0
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.js +9 -0
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.js +5 -0
- package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.d.ts +5 -5
- package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.js +5 -45
- package/dist/esm/stateManagement/segmentation/updateLabelmapSegmentationImageReferences.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/updateLabelmapSegmentationImageReferences.js +5 -0
- package/dist/esm/store/SynchronizerManager/createSynchronizer.js +1 -1
- package/dist/esm/store/SynchronizerManager/destroy.js +1 -1
- package/dist/esm/store/SynchronizerManager/destroySynchronizer.js +1 -1
- package/dist/esm/store/SynchronizerManager/getAllSynchronizers.js +1 -1
- package/dist/esm/store/SynchronizerManager/getSynchronizer.js +1 -1
- package/dist/esm/store/SynchronizerManager/getSynchronizersForViewport.js +1 -1
- package/dist/esm/store/ToolGroupManager/ToolGroup.js +7 -6
- package/dist/esm/store/ToolGroupManager/createToolGroup.js +1 -1
- package/dist/esm/store/ToolGroupManager/destroy.js +3 -3
- package/dist/esm/store/ToolGroupManager/destroyToolGroup.js +1 -2
- package/dist/esm/store/ToolGroupManager/getAllToolGroups.js +1 -1
- package/dist/esm/store/ToolGroupManager/getToolGroup.js +1 -1
- package/dist/esm/store/ToolGroupManager/getToolGroupForViewport.js +1 -1
- package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js +1 -1
- package/dist/esm/store/addTool.d.ts +1 -0
- package/dist/esm/store/addTool.js +3 -0
- package/dist/esm/store/index.d.ts +1 -2
- package/dist/esm/store/index.js +1 -2
- package/dist/esm/tools/AdvancedMagnifyTool.d.ts +93 -2
- package/dist/esm/tools/AdvancedMagnifyTool.js +506 -4
- package/dist/esm/tools/AnnotationEraserTool.js +2 -2
- package/dist/esm/tools/CrosshairsTool.js +1 -1
- package/dist/esm/tools/MagnifyTool.js +1 -1
- package/dist/esm/tools/SculptorTool.js +3 -3
- package/dist/esm/tools/WindowLevelRegionTool.js +1 -1
- package/dist/esm/tools/annotation/AngleTool.js +4 -3
- package/dist/esm/tools/annotation/ArrowAnnotateTool.js +1 -1
- package/dist/esm/tools/annotation/BidirectionalTool.js +7 -8
- package/dist/esm/tools/annotation/CircleROITool.js +15 -16
- package/dist/esm/tools/annotation/CobbAngleTool.js +1 -1
- package/dist/esm/tools/annotation/DragProbeTool.js +2 -2
- package/dist/esm/tools/annotation/EllipticalROITool.js +12 -13
- package/dist/esm/tools/annotation/HeightTool.js +5 -6
- package/dist/esm/tools/annotation/KeyImageTool.js +1 -1
- package/dist/esm/tools/annotation/LengthTool.js +5 -6
- package/dist/esm/tools/annotation/LivewireContourTool.js +3 -2
- package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts +1 -2
- package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +4 -4
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +20 -20
- package/dist/esm/tools/annotation/ProbeTool.js +9 -10
- package/dist/esm/tools/annotation/RectangleROITool.js +12 -13
- package/dist/esm/tools/annotation/SplineROITool.js +12 -9
- package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +6 -7
- package/dist/esm/tools/annotation/VideoRedactionTool.js +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js +2 -2
- package/dist/esm/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js +1 -1
- package/dist/esm/tools/base/ContourBaseTool.js +2 -2
- package/dist/esm/tools/base/ContourSegmentationBaseTool.js +24 -15
- package/dist/esm/tools/displayTools/Contour/contourDisplay.js +9 -8
- package/dist/esm/tools/displayTools/Contour/contourHandler/handleContourSegmentation.js +3 -3
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +2 -1
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -8
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +19 -25
- package/dist/esm/tools/displayTools/Surface/surfaceDisplay.js +10 -7
- package/dist/esm/tools/index.d.ts +1 -3
- package/dist/esm/tools/index.js +1 -3
- package/dist/esm/tools/segmentation/BrushTool.js +10 -8
- package/dist/esm/tools/segmentation/CircleROIStartEndThresholdTool.js +8 -9
- package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +11 -13
- package/dist/esm/tools/segmentation/SegmentSelectTool.js +1 -1
- package/dist/esm/tools/segmentation/strategies/compositions/preview.js +4 -4
- package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +2 -2
- package/dist/esm/utilities/annotationHydration.js +1 -1
- package/dist/esm/utilities/contourSegmentation/addContourSegmentationAnnotation.js +1 -1
- package/dist/esm/utilities/contourSegmentation/removeContourSegmentationAnnotation.js +2 -2
- package/dist/esm/utilities/contours/generateContourSetsFromLabelmap.js +1 -1
- package/dist/esm/utilities/contours/getContourHolesDataWorld.js +1 -1
- package/dist/esm/utilities/contours/index.d.ts +1 -2
- package/dist/esm/utilities/contours/index.js +1 -2
- package/dist/esm/utilities/contours/updateContourPolyline.js +1 -1
- package/dist/esm/utilities/getCalibratedUnits.d.ts +2 -2
- package/dist/esm/utilities/getCalibratedUnits.js +13 -13
- package/dist/esm/utilities/getToolsWithModesForElement.js +2 -2
- package/dist/esm/utilities/index.d.ts +1 -2
- package/dist/esm/utilities/index.js +1 -2
- package/dist/esm/utilities/math/line/distanceToPointSquaredInfo.js +3 -3
- package/dist/esm/utilities/math/polyline/isClosed.js +2 -2
- package/dist/esm/utilities/planarFreehandROITool/smoothAnnotation.js +3 -3
- package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js +1 -1
- package/dist/esm/utilities/segmentation/brushThresholdForToolGroup.js +1 -1
- package/dist/esm/utilities/segmentation/getBrushToolInstances.d.ts +1 -0
- package/dist/esm/utilities/segmentation/getBrushToolInstances.js +17 -0
- package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.d.ts +0 -2
- package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +3 -22
- package/dist/esm/utilities/segmentation/index.d.ts +2 -2
- package/dist/esm/utilities/segmentation/index.js +2 -2
- package/dist/esm/utilities/segmentation/invalidateBrushCursor.js +1 -4
- package/dist/esm/utilities/segmentation/rectangleROIThresholdVolumeByRange.js +2 -1
- package/dist/esm/utilities/segmentation/segmentContourAction.js +5 -5
- package/dist/esm/utilities/segmentation/utilities.d.ts +4 -1
- package/dist/esm/utilities/segmentation/utilities.js +23 -17
- package/dist/esm/utilities/viewportFilters/filterViewportsWithToolEnabled.js +2 -2
- package/dist/umd/985.index.js.map +1 -1
- package/dist/umd/index.js +2 -1
- package/dist/umd/index.js.LICENSE.txt +6 -0
- package/dist/umd/index.js.map +1 -1
- package/package.json +5 -4
- package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.d.ts +0 -17
- package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.js +0 -50
- package/dist/esm/stateManagement/segmentation/helpers/getSegmentationRepresentationRenderingConfig.d.ts +0 -2
- package/dist/esm/stateManagement/segmentation/helpers/getSegmentationRepresentationRenderingConfig.js +0 -11
- package/dist/esm/tools/AdvancedMagnifyViewport.d.ts +0 -76
- package/dist/esm/tools/AdvancedMagnifyViewport.js +0 -351
- package/dist/esm/tools/AdvancedMagnifyViewportManager.d.ts +0 -38
- package/dist/esm/tools/AdvancedMagnifyViewportManager.js +0 -161
- package/dist/esm/tools/StackScrollToolMouseWheelTool.d.ts +0 -16
- package/dist/esm/tools/StackScrollToolMouseWheelTool.js +0 -33
- package/dist/esm/utilities/contours/interpolation/index.d.ts +0 -2
- package/dist/esm/utilities/contours/interpolation/index.js +0 -2
- package/dist/esm/utilities/segmentation/triggerSegmentationRender.d.ts +0 -3
- package/dist/esm/utilities/segmentation/triggerSegmentationRender.js +0 -8
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { AnnotationTool } from '../base';
|
|
2
2
|
import { getEnabledElement, VolumeViewport, utilities as csUtils, } from '@cornerstonejs/core';
|
|
3
3
|
import { getCalibratedLengthUnitsAndScale } from '../../utilities/getCalibratedUnits';
|
|
4
|
-
import { roundNumber } from '../../utilities';
|
|
5
4
|
import throttle from '../../utilities/throttle';
|
|
6
5
|
import { addAnnotation, getAnnotations, removeAnnotation, } from '../../stateManagement';
|
|
7
6
|
import { isAnnotationLocked } from '../../stateManagement/annotation/annotationLocking';
|
|
8
7
|
import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
|
|
9
8
|
import { triggerAnnotationCompleted, triggerAnnotationModified, } from '../../stateManagement/annotation/helpers/state';
|
|
10
9
|
import { drawHandles as drawHandlesSvg, drawLinkedTextBox as drawLinkedTextBoxSvg, drawRectByCoordinates as drawRectSvg, } from '../../drawingSvg';
|
|
11
|
-
import { state } from '../../store';
|
|
10
|
+
import { state } from '../../store/state';
|
|
12
11
|
import { Events } from '../../enums';
|
|
13
12
|
import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
|
|
14
13
|
import * as rectangle from '../../utilities/math/rectangle';
|
|
@@ -347,14 +346,14 @@ class RectangleROITool extends AnnotationTool {
|
|
|
347
346
|
});
|
|
348
347
|
const { viewPlaneNormal, viewUp } = viewport.getCamera();
|
|
349
348
|
if (!data.cachedStats[targetId] ||
|
|
350
|
-
data.cachedStats[targetId].
|
|
349
|
+
data.cachedStats[targetId].areaUnit == null) {
|
|
351
350
|
data.cachedStats[targetId] = {
|
|
352
351
|
Modality: null,
|
|
353
352
|
area: null,
|
|
354
353
|
max: null,
|
|
355
354
|
mean: null,
|
|
356
355
|
stdDev: null,
|
|
357
|
-
|
|
356
|
+
areaUnit: null,
|
|
358
357
|
};
|
|
359
358
|
this._calculateCachedStats(annotation, viewPlaneNormal, viewUp, renderingEngine, enabledElement);
|
|
360
359
|
}
|
|
@@ -488,13 +487,13 @@ class RectangleROITool extends AnnotationTool {
|
|
|
488
487
|
];
|
|
489
488
|
const { worldWidth, worldHeight } = getWorldWidthAndHeightFromCorners(viewPlaneNormal, viewUp, worldPos1, worldPos2);
|
|
490
489
|
const handles = [pos1Index, pos2Index];
|
|
491
|
-
const { scale,
|
|
490
|
+
const { scale, areaUnit } = getCalibratedLengthUnitsAndScale(image, handles);
|
|
492
491
|
const area = Math.abs(worldWidth * worldHeight) / (scale * scale);
|
|
493
492
|
const pixelUnitsOptions = {
|
|
494
493
|
isPreScaled: isViewportPreScaled(viewport, targetId),
|
|
495
494
|
isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
|
|
496
495
|
};
|
|
497
|
-
const
|
|
496
|
+
const modalityUnit = getPixelValueUnits(metadata.Modality, annotation.metadata.referencedImageId, pixelUnitsOptions);
|
|
498
497
|
const pointsInShape = voxelManager.forEach(this.configuration.statsCalculator.statsCallback, {
|
|
499
498
|
boundsIJK,
|
|
500
499
|
imageData,
|
|
@@ -509,8 +508,8 @@ class RectangleROITool extends AnnotationTool {
|
|
|
509
508
|
max: stats.max?.value,
|
|
510
509
|
statsArray: stats.array,
|
|
511
510
|
pointsInShape: pointsInShape,
|
|
512
|
-
|
|
513
|
-
|
|
511
|
+
areaUnit,
|
|
512
|
+
modalityUnit,
|
|
514
513
|
};
|
|
515
514
|
}
|
|
516
515
|
else {
|
|
@@ -533,15 +532,15 @@ class RectangleROITool extends AnnotationTool {
|
|
|
533
532
|
}
|
|
534
533
|
function defaultGetTextLines(data, targetId) {
|
|
535
534
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
536
|
-
const { area, mean, max, stdDev,
|
|
535
|
+
const { area, mean, max, stdDev, areaUnit, modalityUnit } = cachedVolumeStats;
|
|
537
536
|
if (mean === undefined) {
|
|
538
537
|
return;
|
|
539
538
|
}
|
|
540
539
|
const textLines = [];
|
|
541
|
-
textLines.push(`Area: ${roundNumber(area)} ${
|
|
542
|
-
textLines.push(`Mean: ${roundNumber(mean)} ${
|
|
543
|
-
textLines.push(`Max: ${roundNumber(max)} ${
|
|
544
|
-
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${
|
|
540
|
+
textLines.push(`Area: ${csUtils.roundNumber(area)} ${areaUnit}`);
|
|
541
|
+
textLines.push(`Mean: ${csUtils.roundNumber(mean)} ${modalityUnit}`);
|
|
542
|
+
textLines.push(`Max: ${csUtils.roundNumber(max)} ${modalityUnit}`);
|
|
543
|
+
textLines.push(`Std Dev: ${csUtils.roundNumber(stdDev)} ${modalityUnit}`);
|
|
545
544
|
return textLines;
|
|
546
545
|
}
|
|
547
546
|
RectangleROITool.toolName = 'RectangleROI';
|
|
@@ -2,19 +2,22 @@ import { getEnabledElement, eventTarget, triggerEvent, utilities, } from '@corne
|
|
|
2
2
|
import { vec3 } from 'gl-matrix';
|
|
3
3
|
import { getChildAnnotations, removeAnnotation, } from '../../stateManagement/annotation/annotationState';
|
|
4
4
|
import { drawHandles as drawHandlesSvg, drawPolyline as drawPolylineSvg, drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg';
|
|
5
|
-
import { state } from '../../store';
|
|
5
|
+
import { state } from '../../store/state';
|
|
6
6
|
import { Events, MouseBindings, KeyboardBindings, ChangeTypes, } from '../../enums';
|
|
7
7
|
import { resetElementCursor } from '../../cursors/elementCursor';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
8
|
+
import * as math from '../../utilities/math';
|
|
9
|
+
import throttle from '../../utilities/throttle';
|
|
10
10
|
import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
|
|
11
11
|
import { getTextBoxCoordsCanvas } from '../../utilities/drawing';
|
|
12
|
+
import { getCalibratedLengthUnitsAndScale } from '../../utilities/getCalibratedUnits';
|
|
13
|
+
import getMouseModifierKey from '../../eventDispatchers/shared/getMouseModifier';
|
|
12
14
|
import { ContourWindingDirection } from '../../types/ContourAnnotation';
|
|
13
15
|
import { CardinalSpline } from './splines/CardinalSpline';
|
|
14
16
|
import { LinearSpline } from './splines/LinearSpline';
|
|
15
17
|
import { CatmullRomSpline } from './splines/CatmullRomSpline';
|
|
16
18
|
import { BSpline } from './splines/BSpline';
|
|
17
19
|
import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
|
|
20
|
+
import { triggerAnnotationRenderForViewportIds } from '../../utilities';
|
|
18
21
|
const SPLINE_MIN_POINTS = 3;
|
|
19
22
|
const SPLINE_CLICK_CLOSE_CURVE_DIST = 10;
|
|
20
23
|
const DEFAULT_SPLINE_CONFIG = {
|
|
@@ -449,7 +452,7 @@ class SplineROITool extends ContourSegmentationBaseTool {
|
|
|
449
452
|
const deltaInX = vec3.distance(originalWorldPoint, deltaXPoint);
|
|
450
453
|
const deltaInY = vec3.distance(originalWorldPoint, deltaYPoint);
|
|
451
454
|
const { imageData } = image;
|
|
452
|
-
const { scale,
|
|
455
|
+
const { scale, areaUnit } = getCalibratedLengthUnitsAndScale(image, () => {
|
|
453
456
|
const { maxX: canvasMaxX, maxY: canvasMaxY, minX: canvasMinX, minY: canvasMinY, } = math.polyline.getAABB(canvasCoordinates);
|
|
454
457
|
const topLeftBBWorld = viewport.canvasToWorld([
|
|
455
458
|
canvasMinX,
|
|
@@ -468,7 +471,7 @@ class SplineROITool extends ContourSegmentationBaseTool {
|
|
|
468
471
|
cachedStats[targetId] = {
|
|
469
472
|
Modality: metadata.Modality,
|
|
470
473
|
area,
|
|
471
|
-
|
|
474
|
+
areaUnit,
|
|
472
475
|
};
|
|
473
476
|
}
|
|
474
477
|
this.triggerAnnotationModified(annotation, enabledElement, ChangeTypes.StatsUpdated);
|
|
@@ -557,11 +560,11 @@ class SplineROITool extends ContourSegmentationBaseTool {
|
|
|
557
560
|
});
|
|
558
561
|
super.renderAnnotationInstance(renderContext);
|
|
559
562
|
if (!data.cachedStats[targetId] ||
|
|
560
|
-
data.cachedStats[targetId].
|
|
563
|
+
data.cachedStats[targetId].areaUnit == null) {
|
|
561
564
|
data.cachedStats[targetId] = {
|
|
562
565
|
Modality: null,
|
|
563
566
|
area: null,
|
|
564
|
-
|
|
567
|
+
areaUnit: null,
|
|
565
568
|
};
|
|
566
569
|
this._calculateCachedStats(annotation, element);
|
|
567
570
|
}
|
|
@@ -712,12 +715,12 @@ class SplineROITool extends ContourSegmentationBaseTool {
|
|
|
712
715
|
}
|
|
713
716
|
function defaultGetTextLines(data, targetId) {
|
|
714
717
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
715
|
-
const { area, isEmptyArea,
|
|
718
|
+
const { area, isEmptyArea, areaUnit } = cachedVolumeStats;
|
|
716
719
|
const textLines = [];
|
|
717
720
|
if (area) {
|
|
718
721
|
const areaLine = isEmptyArea
|
|
719
722
|
? `Area: Oblique not supported`
|
|
720
|
-
: `Area: ${roundNumber(area)} ${
|
|
723
|
+
: `Area: ${utilities.roundNumber(area)} ${areaUnit}`;
|
|
721
724
|
textLines.push(areaLine);
|
|
722
725
|
}
|
|
723
726
|
return textLines;
|
|
@@ -5,9 +5,8 @@ import throttle from '../../utilities/throttle';
|
|
|
5
5
|
import { addAnnotation, getAnnotations, removeAnnotation, } from '../../stateManagement/annotation/annotationState';
|
|
6
6
|
import { triggerAnnotationCompleted, triggerAnnotationModified, } from '../../stateManagement/annotation/helpers/state';
|
|
7
7
|
import { drawHandle as drawHandleSvg, drawLine as drawLineSvg, drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg';
|
|
8
|
-
import { state } from '../../store';
|
|
8
|
+
import { state } from '../../store/state';
|
|
9
9
|
import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
|
|
10
|
-
import { roundNumber } from '../../utilities';
|
|
11
10
|
import { distanceToPoint } from '../../utilities/math/point';
|
|
12
11
|
import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
|
|
13
12
|
import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
|
|
@@ -439,23 +438,23 @@ function defaultGetTextLines(data, targetId, configuration) {
|
|
|
439
438
|
const cachedStats = data.cachedStats[targetId];
|
|
440
439
|
const { xValues, yValues, units, isUnitless, isHorizontal } = cachedStats;
|
|
441
440
|
if (isUnitless) {
|
|
442
|
-
return [`${roundNumber(xValues[0])} px`];
|
|
441
|
+
return [`${csUtils.roundNumber(xValues[0])} px`];
|
|
443
442
|
}
|
|
444
443
|
if (configuration.displayBothAxesDistances) {
|
|
445
444
|
const dist1 = Math.abs(xValues[1] - xValues[0]);
|
|
446
445
|
const dist2 = Math.abs(yValues[1] - yValues[0]);
|
|
447
446
|
return [
|
|
448
|
-
`${roundNumber(dist1)} ${units[0]}`,
|
|
449
|
-
`${roundNumber(dist2)} ${units[1]}`,
|
|
447
|
+
`${csUtils.roundNumber(dist1)} ${units[0]}`,
|
|
448
|
+
`${csUtils.roundNumber(dist2)} ${units[1]}`,
|
|
450
449
|
];
|
|
451
450
|
}
|
|
452
451
|
if (isHorizontal) {
|
|
453
452
|
const dist = Math.abs(xValues[1] - xValues[0]);
|
|
454
|
-
return [`${roundNumber(dist)} ${units[0]}`];
|
|
453
|
+
return [`${csUtils.roundNumber(dist)} ${units[0]}`];
|
|
455
454
|
}
|
|
456
455
|
else {
|
|
457
456
|
const dist = Math.abs(yValues[1] - yValues[0]);
|
|
458
|
-
return [`${roundNumber(dist)} ${units[1]}`];
|
|
457
|
+
return [`${csUtils.roundNumber(dist)} ${units[1]}`];
|
|
459
458
|
}
|
|
460
459
|
}
|
|
461
460
|
UltrasoundDirectionalTool.toolName = 'UltrasoundDirectionalTool';
|
|
@@ -4,7 +4,7 @@ import { AnnotationTool } from '../base';
|
|
|
4
4
|
import throttle from '../../utilities/throttle';
|
|
5
5
|
import { addAnnotation, getAnnotations, removeAnnotation, } from '../../stateManagement';
|
|
6
6
|
import { drawHandles as drawHandlesSvg, drawRedactionRect as drawRedactionRectSvg, } from '../../drawingSvg';
|
|
7
|
-
import { state } from '../../store';
|
|
7
|
+
import { state } from '../../store/state';
|
|
8
8
|
import { Events } from '../../enums';
|
|
9
9
|
import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
|
|
10
10
|
import * as rectangle from '../../utilities/math/rectangle';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { vec3, vec2 } from 'gl-matrix';
|
|
2
2
|
import { getEnabledElement } from '@cornerstonejs/core';
|
|
3
|
-
import { state } from '../../../store';
|
|
3
|
+
import { state } from '../../../store/state';
|
|
4
4
|
import { Events } from '../../../enums';
|
|
5
5
|
import { resetElementCursor, hideElementCursor, } from '../../../cursors/elementCursor';
|
|
6
6
|
import { polyline } from '../../../utilities/math';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getEnabledElement, utilities } from '@cornerstonejs/core';
|
|
2
2
|
import { resetElementCursor, hideElementCursor, } from '../../../cursors/elementCursor';
|
|
3
3
|
import { Events } from '../../../enums';
|
|
4
|
-
import { state } from '../../../store';
|
|
4
|
+
import { state } from '../../../store/state';
|
|
5
5
|
import { vec3 } from 'gl-matrix';
|
|
6
6
|
import { shouldSmooth, getInterpolatedPoints, } from '../../../utilities/planarFreehandROITool/smoothPoints';
|
|
7
7
|
import getMouseModifierKey from '../../../eventDispatchers/shared/getMouseModifier';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { vec3, vec2 } from 'gl-matrix';
|
|
2
2
|
import { getEnabledElement } from '@cornerstonejs/core';
|
|
3
|
-
import { state } from '../../../store';
|
|
3
|
+
import { state } from '../../../store/state';
|
|
4
4
|
import { Events } from '../../../enums';
|
|
5
5
|
import { resetElementCursor, hideElementCursor, } from '../../../cursors/elementCursor';
|
|
6
6
|
import { polyline } from '../../../utilities/math';
|
|
7
7
|
import { shouldSmooth, getInterpolatedPoints, } from '../../../utilities/planarFreehandROITool/smoothPoints';
|
|
8
8
|
import triggerAnnotationRenderForViewportIds from '../../../utilities/triggerAnnotationRenderForViewportIds';
|
|
9
|
-
import
|
|
9
|
+
import updateContourPolyline from '../../../utilities/contours/updateContourPolyline';
|
|
10
10
|
import findOpenUShapedContourVectorToPeak from './findOpenUShapedContourVectorToPeak';
|
|
11
11
|
import { triggerAnnotationModified } from '../../../stateManagement/annotation/helpers/state';
|
|
12
12
|
const { addCanvasPointsToArray, getSubPixelSpacingAndXYDirections } = polyline;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getEnabledElement } from '@cornerstonejs/core';
|
|
2
|
-
import { state } from '../../../store';
|
|
2
|
+
import { state } from '../../../store/state';
|
|
3
3
|
import { Events } from '../../../enums';
|
|
4
4
|
import { hideElementCursor } from '../../../cursors/elementCursor';
|
|
5
5
|
import { polyline } from '../../../utilities/math';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { drawHandles as drawHandlesSvg, drawPolyline as drawPolylineSvg, drawPath as drawPathSvg, } from '../../../drawingSvg';
|
|
2
2
|
import { polyline } from '../../../utilities/math';
|
|
3
3
|
import { findOpenUShapedContourVectorToPeakOnRender } from './findOpenUShapedContourVectorToPeak';
|
|
4
|
-
import
|
|
4
|
+
import getContourHolesDataCanvas from '../../../utilities/contours/getContourHolesDataCanvas';
|
|
5
5
|
const { pointsAreWithinCloseContourProximity } = polyline;
|
|
6
6
|
function _getRenderingOptions(enabledElement, annotation) {
|
|
7
7
|
const styleSpecifier = {
|
|
@@ -2,8 +2,8 @@ import { getEnabledElement } from '@cornerstonejs/core';
|
|
|
2
2
|
import { addAnnotation, getAnnotations, getChildAnnotations, } from '../../stateManagement/annotation/annotationState';
|
|
3
3
|
import { drawPath as drawPathSvg } from '../../drawingSvg';
|
|
4
4
|
import AnnotationTool from './AnnotationTool';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import updateContourPolyline from '../../utilities/contours/updateContourPolyline';
|
|
6
|
+
import getContourHolesDataCanvas from '../../utilities/contours/getContourHolesDataCanvas';
|
|
7
7
|
class ContourBaseTool extends AnnotationTool {
|
|
8
8
|
constructor(toolProps, defaultToolProps) {
|
|
9
9
|
super(toolProps, defaultToolProps);
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { getEnabledElement, utilities } from '@cornerstonejs/core';
|
|
2
|
-
import {
|
|
2
|
+
import { getGlobalConfig, getSegmentationRepresentationConfig, getSegmentIndexConfig, } from '../../stateManagement/segmentation/config/segmentationConfig';
|
|
3
|
+
import { getSegmentation } from '../../stateManagement/segmentation/getSegmentation';
|
|
3
4
|
import { SegmentationRepresentations } from '../../enums';
|
|
4
5
|
import ContourBaseTool from './ContourBaseTool';
|
|
5
6
|
import { triggerSegmentationDataModified } from '../../stateManagement/segmentation/triggerSegmentationEvents';
|
|
6
|
-
import
|
|
7
|
+
import InterpolationManager from '../../utilities/segmentation/InterpolationManager/InterpolationManager';
|
|
7
8
|
import { addContourSegmentationAnnotation, removeContourSegmentationAnnotation, } from '../../utilities/contourSegmentation';
|
|
8
|
-
import { triggerAnnotationRenderForToolGroupIds } from '../../utilities';
|
|
9
|
-
import { getActiveSegmentationRepresentation, getSegmentationRepresentationsForSegmentation, getSegmentationRepresentations, getViewportIdsWithSegmentation, } from '../../stateManagement/segmentation/segmentationState';
|
|
9
|
+
import { triggerAnnotationRenderForToolGroupIds } from '../../utilities/triggerAnnotationRenderForToolGroupIds';
|
|
10
10
|
import { getToolGroupForViewport } from '../../store/ToolGroupManager';
|
|
11
|
+
import { getSegmentIndexColor } from '../../stateManagement/segmentation/config/segmentationColor';
|
|
12
|
+
import { getSegmentationRepresentations } from '../../stateManagement/segmentation/getSegmentationRepresentations';
|
|
13
|
+
import { getSegmentationRepresentationsForSegmentation } from '../../stateManagement/segmentation/getSegmentationRepresentationsForSegmentation';
|
|
14
|
+
import { getActiveSegmentationRepresentation } from '../../stateManagement/segmentation/getActiveSegmentationRepresentation';
|
|
15
|
+
import { getSegmentationRepresentationVisibility } from '../../stateManagement/segmentation/getSegmentationRepresentationVisibility';
|
|
16
|
+
import { getViewportIdsWithSegmentation } from '../../stateManagement/segmentation/getViewportIdsWithSegmentation';
|
|
17
|
+
import { getActiveSegmentIndex } from '../../stateManagement/segmentation/getActiveSegmentIndex';
|
|
18
|
+
import { getLockedSegmentIndices } from '../../stateManagement/segmentation/segmentLocking';
|
|
19
|
+
import { getSegmentIndexVisibility } from '../../stateManagement/segmentation/config/segmentationVisibility';
|
|
11
20
|
class ContourSegmentationBaseTool extends ContourBaseTool {
|
|
12
21
|
constructor(toolProps, defaultToolProps) {
|
|
13
22
|
super(toolProps, defaultToolProps);
|
|
@@ -30,7 +39,7 @@ class ContourSegmentationBaseTool extends ContourBaseTool {
|
|
|
30
39
|
if (!this.isContourSegmentationTool()) {
|
|
31
40
|
return contourAnnotation;
|
|
32
41
|
}
|
|
33
|
-
const activeSeg =
|
|
42
|
+
const activeSeg = getActiveSegmentationRepresentation(viewport.id);
|
|
34
43
|
if (!activeSeg) {
|
|
35
44
|
throw new Error('No active segmentation detected, create one before using scissors tool');
|
|
36
45
|
}
|
|
@@ -39,7 +48,7 @@ class ContourSegmentationBaseTool extends ContourBaseTool {
|
|
|
39
48
|
throw new Error(`A contour segmentation must be active`);
|
|
40
49
|
}
|
|
41
50
|
const { segmentationId } = activeSeg;
|
|
42
|
-
const segmentIndex =
|
|
51
|
+
const segmentIndex = getActiveSegmentIndex(segmentationId);
|
|
43
52
|
return utilities.deepMerge(contourAnnotation, {
|
|
44
53
|
data: {
|
|
45
54
|
segmentation: {
|
|
@@ -90,7 +99,7 @@ class ContourSegmentationBaseTool extends ContourBaseTool {
|
|
|
90
99
|
_getContourSegmentationStyle(context) {
|
|
91
100
|
const annotation = context.annotation;
|
|
92
101
|
const { segmentationId, segmentIndex } = annotation.data.segmentation;
|
|
93
|
-
const segmentation =
|
|
102
|
+
const segmentation = getSegmentation(segmentationId);
|
|
94
103
|
const segmentationRepresentations = getSegmentationRepresentationsForSegmentation(segmentationId);
|
|
95
104
|
if (!segmentationRepresentations?.length) {
|
|
96
105
|
return {};
|
|
@@ -107,19 +116,19 @@ class ContourSegmentationBaseTool extends ContourBaseTool {
|
|
|
107
116
|
}
|
|
108
117
|
const { segmentationRepresentationUID } = segmentationRepresentation;
|
|
109
118
|
const { autoGenerated } = annotation;
|
|
110
|
-
const segmentsLocked =
|
|
119
|
+
const segmentsLocked = getLockedSegmentIndices(segmentationId);
|
|
111
120
|
const annotationLocked = segmentsLocked.includes(segmentIndex);
|
|
112
|
-
const segmentColor =
|
|
121
|
+
const segmentColor = getSegmentIndexColor(segmentationRepresentationUID, segmentIndex);
|
|
113
122
|
const viewportId = context.styleSpecifier.viewportId;
|
|
114
|
-
const segmentationVisible =
|
|
115
|
-
const globalConfig =
|
|
116
|
-
const
|
|
117
|
-
const segmentConfig =
|
|
118
|
-
const segmentVisible =
|
|
123
|
+
const segmentationVisible = getSegmentationRepresentationVisibility(viewportId, segmentationRepresentationUID);
|
|
124
|
+
const globalConfig = getGlobalConfig();
|
|
125
|
+
const segmentationRepresentationConfig = getSegmentationRepresentationConfig(segmentationRepresentationUID);
|
|
126
|
+
const segmentConfig = getSegmentIndexConfig(segmentationRepresentationUID, segmentIndex);
|
|
127
|
+
const segmentVisible = getSegmentIndexVisibility(viewportId, segmentationRepresentationUID, segmentIndex);
|
|
119
128
|
const activeSegRep = getActiveSegmentationRepresentation(viewportId);
|
|
120
129
|
const isActive = activeSegRep.segmentationRepresentationUID ===
|
|
121
130
|
segmentationRepresentationUID;
|
|
122
|
-
const mergedConfig = Object.assign({}, globalConfig?.representations?.CONTOUR ?? {},
|
|
131
|
+
const mergedConfig = Object.assign({}, globalConfig?.representations?.CONTOUR ?? {}, segmentationRepresentationConfig?.CONTOUR ?? {}, segmentConfig?.CONTOUR ?? {});
|
|
123
132
|
let lineWidth = 1;
|
|
124
133
|
let lineDash = undefined;
|
|
125
134
|
let lineOpacity = 1;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getEnabledElementByViewportId } from '@cornerstonejs/core';
|
|
2
2
|
import Representations from '../../../enums/SegmentationRepresentations';
|
|
3
|
-
import * as SegmentationState from '../../../stateManagement/segmentation/segmentationState';
|
|
4
|
-
import removeContourFromElement from './removeContourFromElement';
|
|
5
3
|
import { deleteConfigCache } from './contourHandler/contourConfigCache';
|
|
6
|
-
import { polySeg } from '../../../stateManagement/segmentation';
|
|
7
4
|
import { handleContourSegmentation } from './contourHandler/handleContourSegmentation';
|
|
5
|
+
import { removeRepresentation as _removeRepresentation } from '../../../stateManagement/segmentation/removeRepresentation';
|
|
6
|
+
import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
|
|
7
|
+
import { canComputeRequestedRepresentation } from '../../../stateManagement/segmentation/polySeg/canComputeRequestedRepresentation';
|
|
8
|
+
import { computeAndAddContourRepresentation } from '../../../stateManagement/segmentation/polySeg/Contour/computeAndAddContourRepresentation';
|
|
8
9
|
let polySegConversionInProgress = false;
|
|
9
10
|
function removeRepresentation(viewportId, segmentationRepresentationUID, renderImmediate = false) {
|
|
10
11
|
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
@@ -12,7 +13,7 @@ function removeRepresentation(viewportId, segmentationRepresentationUID, renderI
|
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
15
|
const { viewport } = enabledElement;
|
|
15
|
-
|
|
16
|
+
_removeRepresentation(segmentationRepresentationUID);
|
|
16
17
|
deleteConfigCache(segmentationRepresentationUID);
|
|
17
18
|
if (!renderImmediate) {
|
|
18
19
|
return;
|
|
@@ -21,16 +22,16 @@ function removeRepresentation(viewportId, segmentationRepresentationUID, renderI
|
|
|
21
22
|
}
|
|
22
23
|
async function render(viewport, contourRepresentation) {
|
|
23
24
|
const { segmentationId } = contourRepresentation;
|
|
24
|
-
const segmentation =
|
|
25
|
+
const segmentation = getSegmentation(segmentationId);
|
|
25
26
|
if (!segmentation) {
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
let contourData = segmentation.representationData[Representations.Contour];
|
|
29
30
|
if (!contourData &&
|
|
30
|
-
|
|
31
|
+
canComputeRequestedRepresentation(contourRepresentation.segmentationRepresentationUID) &&
|
|
31
32
|
!polySegConversionInProgress) {
|
|
32
33
|
polySegConversionInProgress = true;
|
|
33
|
-
contourData = await
|
|
34
|
+
contourData = await computeAndAddContourRepresentation(segmentationId, {
|
|
34
35
|
segmentationRepresentationUID: contourRepresentation.segmentationRepresentationUID,
|
|
35
36
|
viewport,
|
|
36
37
|
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { addAnnotation } from '../../../../stateManagement';
|
|
1
|
+
import { addAnnotation } from '../../../../stateManagement/annotation/annotationState';
|
|
2
2
|
import { cache, utilities } from '@cornerstonejs/core';
|
|
3
3
|
import { getClosestImageIdForStackViewport } from '../../../../utilities/annotationHydration';
|
|
4
4
|
import { getConfigCache, setConfigCache } from './contourConfigCache';
|
|
5
5
|
import { addContourSegmentationAnnotation } from '../../../../utilities/contourSegmentation';
|
|
6
6
|
import { validateGeometry } from './utils';
|
|
7
|
-
import { getGlobalConfig
|
|
7
|
+
import { getGlobalConfig } from '../../../../stateManagement/segmentation/getGlobalConfig';
|
|
8
8
|
import { getHiddenSegmentIndices } from '../../../../stateManagement/segmentation/config/segmentationVisibility';
|
|
9
|
-
import { getSegmentIndexConfig } from '../../../../stateManagement/segmentation/config';
|
|
9
|
+
import { getSegmentIndexConfig } from '../../../../stateManagement/segmentation/config/segmentationConfig';
|
|
10
10
|
function handleContourSegmentation(viewport, geometryIds, annotationUIDsMap, contourRepresentation) {
|
|
11
11
|
const addOrUpdateFn = annotationUIDsMap.size
|
|
12
12
|
? updateContourSets
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getEnabledElement, addVolumesToViewports, addImageSlicesToViewports, Enums, } from '@cornerstonejs/core';
|
|
2
2
|
import { isVolumeSegmentation } from '../../segmentation/strategies/utils/stackVolumeCheck';
|
|
3
|
-
import {
|
|
3
|
+
import { getSegmentationRepresentation } from '../../../stateManagement/segmentation/getSegmentationRepresentation';
|
|
4
|
+
import { getCurrentLabelmapImageIdForViewport } from '../../../stateManagement/segmentation/getCurrentLabelmapImageIdForViewport';
|
|
4
5
|
async function addLabelmapToElement(element, labelMapData, segmentationRepresentationUID) {
|
|
5
6
|
const enabledElement = getEnabledElement(element);
|
|
6
7
|
const { renderingEngine, viewport } = enabledElement;
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction';
|
|
2
|
-
import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
|
|
3
1
|
import type { Types } from '@cornerstonejs/core';
|
|
4
2
|
import type { LabelmapRepresentation } from '../../../types/SegmentationStateTypes';
|
|
5
|
-
declare function getSegmentationRepresentationRenderingConfig(): {
|
|
6
|
-
ofun: vtkPiecewiseFunction;
|
|
7
|
-
cfun: vtkColorTransferFunction;
|
|
8
|
-
};
|
|
9
3
|
declare function removeRepresentation(viewportId: string, segmentationRepresentationUID: string, renderImmediate?: boolean): void;
|
|
10
4
|
declare function render(viewport: Types.IStackViewport | Types.IVolumeViewport, representation: LabelmapRepresentation): Promise<void>;
|
|
11
5
|
declare const _default: {
|
|
12
|
-
getSegmentationRepresentationRenderingConfig: typeof getSegmentationRepresentationRenderingConfig;
|
|
13
6
|
render: typeof render;
|
|
14
7
|
removeRepresentation: typeof removeRepresentation;
|
|
15
8
|
};
|
|
16
9
|
export default _default;
|
|
17
|
-
export {
|
|
10
|
+
export { render, removeRepresentation };
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction';
|
|
2
|
-
import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
|
|
3
1
|
import { cache, getEnabledElementByViewportId, StackViewport, VolumeViewport, } from '@cornerstonejs/core';
|
|
4
2
|
import Representations from '../../../enums/SegmentationRepresentations';
|
|
5
|
-
import * as SegmentationState from '../../../stateManagement/segmentation/segmentationState';
|
|
6
3
|
import addLabelmapToElement from './addLabelmapToElement';
|
|
7
4
|
import removeLabelmapFromElement from './removeLabelmapFromElement';
|
|
8
5
|
import { isVolumeSegmentation } from '../../segmentation/strategies/utils/stackVolumeCheck';
|
|
9
|
-
import { polySeg } from '../../../stateManagement/segmentation';
|
|
10
6
|
import { getHiddenSegmentIndices } from '../../../stateManagement/segmentation/config/segmentationVisibility';
|
|
7
|
+
import { removeRepresentation as _removeRepresentation } from '../../../stateManagement/segmentation/removeRepresentation';
|
|
8
|
+
import { getActiveSegmentationRepresentation } from '../../../stateManagement/segmentation/getActiveSegmentationRepresentation';
|
|
9
|
+
import { getColorLUT } from '../../../stateManagement/segmentation/getColorLUT';
|
|
10
|
+
import { getCurrentLabelmapImageIdForViewport } from '../../../stateManagement/segmentation/getCurrentLabelmapImageIdForViewport';
|
|
11
|
+
import { getGlobalConfig } from '../../../stateManagement/segmentation/getGlobalConfig';
|
|
12
|
+
import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
|
|
13
|
+
import { canComputeRequestedRepresentation } from '../../../stateManagement/segmentation/polySeg/canComputeRequestedRepresentation';
|
|
14
|
+
import { computeAndAddLabelmapRepresentation } from '../../../stateManagement/segmentation/polySeg/Labelmap/computeAndAddLabelmapRepresentation';
|
|
11
15
|
const MAX_NUMBER_COLORS = 255;
|
|
12
16
|
const labelMapConfigCache = new Map();
|
|
13
|
-
function getSegmentationRepresentationRenderingConfig() {
|
|
14
|
-
const cfun = vtkColorTransferFunction.newInstance();
|
|
15
|
-
const ofun = vtkPiecewiseFunction.newInstance();
|
|
16
|
-
ofun.addPoint(0, 0);
|
|
17
|
-
return {
|
|
18
|
-
ofun,
|
|
19
|
-
cfun,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
17
|
let polySegConversionInProgress = false;
|
|
23
18
|
function removeRepresentation(viewportId, segmentationRepresentationUID, renderImmediate = false) {
|
|
24
19
|
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
@@ -27,7 +22,7 @@ function removeRepresentation(viewportId, segmentationRepresentationUID, renderI
|
|
|
27
22
|
}
|
|
28
23
|
const { viewport } = enabledElement;
|
|
29
24
|
removeLabelmapFromElement(viewport.element, segmentationRepresentationUID);
|
|
30
|
-
|
|
25
|
+
_removeRepresentation(segmentationRepresentationUID);
|
|
31
26
|
if (!renderImmediate) {
|
|
32
27
|
return;
|
|
33
28
|
}
|
|
@@ -55,7 +50,7 @@ function isSameFrameOfReference(viewport, referencedVolumeId) {
|
|
|
55
50
|
}
|
|
56
51
|
async function render(viewport, representation) {
|
|
57
52
|
const { segmentationId, segmentationRepresentationUID } = representation;
|
|
58
|
-
const segmentation =
|
|
53
|
+
const segmentation = getSegmentation(segmentationId);
|
|
59
54
|
if (!segmentation) {
|
|
60
55
|
console.warn('No segmentation found for segmentationId: ', segmentationId);
|
|
61
56
|
return;
|
|
@@ -63,10 +58,10 @@ async function render(viewport, representation) {
|
|
|
63
58
|
let labelmapData = segmentation.representationData[Representations.Labelmap];
|
|
64
59
|
let actorEntry = viewport.getActor(segmentationRepresentationUID);
|
|
65
60
|
if (!labelmapData &&
|
|
66
|
-
|
|
61
|
+
canComputeRequestedRepresentation(segmentationRepresentationUID) &&
|
|
67
62
|
!polySegConversionInProgress) {
|
|
68
63
|
polySegConversionInProgress = true;
|
|
69
|
-
labelmapData = await
|
|
64
|
+
labelmapData = await computeAndAddLabelmapRepresentation(segmentationId, {
|
|
70
65
|
segmentationRepresentationUID,
|
|
71
66
|
viewport,
|
|
72
67
|
});
|
|
@@ -99,7 +94,7 @@ async function render(viewport, representation) {
|
|
|
99
94
|
if (viewport instanceof VolumeViewport) {
|
|
100
95
|
return;
|
|
101
96
|
}
|
|
102
|
-
const labelmapImageId =
|
|
97
|
+
const labelmapImageId = getCurrentLabelmapImageIdForViewport(viewport.id, segmentationId);
|
|
103
98
|
if (!labelmapImageId) {
|
|
104
99
|
return;
|
|
105
100
|
}
|
|
@@ -115,19 +110,19 @@ async function render(viewport, representation) {
|
|
|
115
110
|
}
|
|
116
111
|
function _setLabelmapColorAndOpacity(viewportId, actorEntry, segmentationRepresentation) {
|
|
117
112
|
const { rendering, config, colorLUTIndex } = segmentationRepresentation;
|
|
118
|
-
const activeSegRep =
|
|
113
|
+
const activeSegRep = getActiveSegmentationRepresentation(viewportId);
|
|
119
114
|
const isActiveLabelmap = activeSegRep === segmentationRepresentation;
|
|
120
115
|
const { cfun, ofun } = rendering;
|
|
121
116
|
const { allSegments, perSegment } = config;
|
|
122
|
-
const globalLabelmapConfig =
|
|
123
|
-
const globalConfig =
|
|
117
|
+
const globalLabelmapConfig = getGlobalConfig().representations[Representations.Labelmap];
|
|
118
|
+
const globalConfig = getGlobalConfig();
|
|
124
119
|
const renderInactiveRepresentations = globalConfig.renderInactiveRepresentations;
|
|
125
120
|
const configToUse = {
|
|
126
121
|
...globalLabelmapConfig,
|
|
127
122
|
...allSegments[Representations.Labelmap],
|
|
128
123
|
};
|
|
129
124
|
const labelmapConfig = configToUse;
|
|
130
|
-
const colorLUT =
|
|
125
|
+
const colorLUT = getColorLUT(colorLUTIndex);
|
|
131
126
|
const numColors = Math.min(256, colorLUT.length);
|
|
132
127
|
const { uid: actorUID } = actorEntry;
|
|
133
128
|
const { outlineWidth, renderOutline, outlineOpacity, activeSegmentOutlineWidthDelta, } = _getLabelmapConfig(labelmapConfig, isActiveLabelmap);
|
|
@@ -167,7 +162,7 @@ function _setLabelmapColorAndOpacity(viewportId, actorEntry, segmentationReprese
|
|
|
167
162
|
actor.getProperty().setInterpolationTypeToNearest();
|
|
168
163
|
actor.getProperty().setUseLabelOutline(renderOutline);
|
|
169
164
|
actor.getProperty().setLabelOutlineOpacity(outlineOpacity);
|
|
170
|
-
const { activeSegmentIndex } =
|
|
165
|
+
const { activeSegmentIndex } = getSegmentation(segmentationRepresentation.segmentationId);
|
|
171
166
|
const outlineWidths = new Array(numColors - 1);
|
|
172
167
|
for (let i = 1; i < numColors; i++) {
|
|
173
168
|
const isHidden = segmentsHidden.has(i);
|
|
@@ -256,8 +251,7 @@ async function _addLabelmapToViewport(viewport, labelmapData, segmentationRepres
|
|
|
256
251
|
await addLabelmapToElement(viewport.element, labelmapData, segmentationRepresentationUID);
|
|
257
252
|
}
|
|
258
253
|
export default {
|
|
259
|
-
getSegmentationRepresentationRenderingConfig,
|
|
260
254
|
render,
|
|
261
255
|
removeRepresentation,
|
|
262
256
|
};
|
|
263
|
-
export {
|
|
257
|
+
export { render, removeRepresentation };
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { cache, getEnabledElementByViewportId, VolumeViewport3D, } from '@cornerstonejs/core';
|
|
2
|
-
import * as SegmentationState from '../../../stateManagement/segmentation/segmentationState';
|
|
3
2
|
import Representations from '../../../enums/SegmentationRepresentations';
|
|
3
|
+
import { removeRepresentation as _removeRepresentation } from '../../../stateManagement/segmentation/removeRepresentation';
|
|
4
4
|
import removeSurfaceFromElement from './removeSurfaceFromElement';
|
|
5
5
|
import addOrUpdateSurfaceToElement from './addOrUpdateSurfaceToElement';
|
|
6
|
-
import {
|
|
6
|
+
import { getSegmentation } from '../../../stateManagement/segmentation/getSegmentation';
|
|
7
|
+
import { getColorLUT } from '../../../stateManagement/segmentation/getColorLUT';
|
|
8
|
+
import { canComputeRequestedRepresentation } from '../../../stateManagement/segmentation/polySeg/canComputeRequestedRepresentation';
|
|
9
|
+
import { computeAndAddSurfaceRepresentation } from '../../../stateManagement/segmentation/polySeg';
|
|
7
10
|
function removeRepresentation(viewportId, segmentationRepresentationUID, renderImmediate = false) {
|
|
8
11
|
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
9
12
|
if (!enabledElement) {
|
|
@@ -11,7 +14,7 @@ function removeRepresentation(viewportId, segmentationRepresentationUID, renderI
|
|
|
11
14
|
}
|
|
12
15
|
const { viewport } = enabledElement;
|
|
13
16
|
removeSurfaceFromElement(viewport.element, segmentationRepresentationUID);
|
|
14
|
-
|
|
17
|
+
_removeRepresentation(segmentationRepresentationUID);
|
|
15
18
|
if (!renderImmediate) {
|
|
16
19
|
return;
|
|
17
20
|
}
|
|
@@ -19,7 +22,7 @@ function removeRepresentation(viewportId, segmentationRepresentationUID, renderI
|
|
|
19
22
|
}
|
|
20
23
|
async function render(viewport, representation) {
|
|
21
24
|
const { colorLUTIndex, segmentationId, segmentationRepresentationUID } = representation;
|
|
22
|
-
const segmentation =
|
|
25
|
+
const segmentation = getSegmentation(segmentationId);
|
|
23
26
|
if (!segmentation) {
|
|
24
27
|
return;
|
|
25
28
|
}
|
|
@@ -28,8 +31,8 @@ async function render(viewport, representation) {
|
|
|
28
31
|
}
|
|
29
32
|
let SurfaceData = segmentation.representationData[Representations.Surface];
|
|
30
33
|
if (!SurfaceData &&
|
|
31
|
-
|
|
32
|
-
SurfaceData = await
|
|
34
|
+
canComputeRequestedRepresentation(segmentationRepresentationUID)) {
|
|
35
|
+
SurfaceData = await computeAndAddSurfaceRepresentation(segmentationId, {
|
|
33
36
|
segmentationRepresentationUID,
|
|
34
37
|
});
|
|
35
38
|
if (!SurfaceData) {
|
|
@@ -40,7 +43,7 @@ async function render(viewport, representation) {
|
|
|
40
43
|
if (!geometryIds?.size) {
|
|
41
44
|
console.warn(`No Surfaces found for segmentationId ${segmentationId}. Skipping render.`);
|
|
42
45
|
}
|
|
43
|
-
const colorLUT =
|
|
46
|
+
const colorLUT = getColorLUT(colorLUTIndex);
|
|
44
47
|
const surfaces = [];
|
|
45
48
|
geometryIds.forEach((geometryId, segmentIndex) => {
|
|
46
49
|
const geometry = cache.getGeometry(geometryId);
|