@cornerstonejs/tools 1.36.3 → 1.37.1
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/cjs/drawingSvg/drawEllipse.js +1 -1
- package/dist/cjs/drawingSvg/drawEllipse.js.map +1 -1
- package/dist/cjs/drawingSvg/drawEllipseByCoordinates.js +2 -3
- package/dist/cjs/drawingSvg/drawEllipseByCoordinates.js.map +1 -1
- package/dist/cjs/enums/StrategyCallbacks.d.ts +13 -0
- package/dist/cjs/enums/StrategyCallbacks.js +17 -0
- package/dist/cjs/enums/StrategyCallbacks.js.map +1 -0
- package/dist/cjs/enums/index.d.ts +2 -1
- package/dist/cjs/enums/index.js +3 -1
- package/dist/cjs/enums/index.js.map +1 -1
- package/dist/cjs/eventDispatchers/keyboardEventHandlers/keyDown.js +17 -7
- package/dist/cjs/eventDispatchers/keyboardEventHandlers/keyDown.js.map +1 -1
- package/dist/cjs/eventDispatchers/shared/getActiveToolForKeyboardEvent.js +4 -1
- package/dist/cjs/eventDispatchers/shared/getActiveToolForKeyboardEvent.js.map +1 -1
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.d.ts +3 -0
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.js +33 -0
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.js.map +1 -0
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -1
- package/dist/cjs/stateManagement/segmentation/config/segmentationColor.js +8 -1
- package/dist/cjs/stateManagement/segmentation/config/segmentationColor.js.map +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.js +1 -2
- package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
- package/dist/cjs/tools/base/BaseTool.d.ts +2 -0
- package/dist/cjs/tools/base/BaseTool.js +7 -1
- package/dist/cjs/tools/base/BaseTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/BrushTool.d.ts +45 -3
- package/dist/cjs/tools/segmentation/BrushTool.js +197 -71
- package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/CircleScissorsTool.js +3 -1
- package/dist/cjs/tools/segmentation/CircleScissorsTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/SphereScissorsTool.js +3 -0
- package/dist/cjs/tools/segmentation/SphereScissorsTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/BrushStrategy.d.ts +87 -0
- package/dist/cjs/tools/segmentation/strategies/BrushStrategy.js +137 -0
- package/dist/cjs/tools/segmentation/strategies/BrushStrategy.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/determineSegmentIndex.d.ts +6 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/determineSegmentIndex.js +53 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/determineSegmentIndex.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/dynamicThreshold.d.ts +6 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/dynamicThreshold.js +41 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/dynamicThreshold.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/erase.d.ts +5 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/erase.js +12 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/erase.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/index.d.ts +35 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/index.js +24 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/index.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/islandRemoval.d.ts +5 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/islandRemoval.js +129 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/islandRemoval.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/preview.d.ts +8 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/preview.js +84 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/preview.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/regionFill.d.ts +5 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/regionFill.js +27 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/regionFill.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/setValue.d.ts +8 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/setValue.js +33 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/setValue.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/threshold.d.ts +5 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/threshold.js +24 -0
- package/dist/cjs/tools/segmentation/strategies/compositions/threshold.js.map +1 -0
- package/dist/cjs/tools/segmentation/strategies/eraseCircle.d.ts +2 -7
- package/dist/cjs/tools/segmentation/strategies/eraseCircle.js +7 -4
- package/dist/cjs/tools/segmentation/strategies/eraseCircle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -7
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.js +7 -6
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillCircle.d.ts +13 -8
- package/dist/cjs/tools/segmentation/strategies/fillCircle.js +68 -90
- package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillRectangle.js +3 -9
- package/dist/cjs/tools/segmentation/strategies/fillRectangle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +6 -9
- package/dist/cjs/tools/segmentation/strategies/fillSphere.js +53 -64
- package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.d.ts +3 -0
- package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js +6 -0
- package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +2 -2
- package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js +2 -2
- package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
- package/dist/cjs/types/BoundsIJK.d.ts +1 -1
- package/dist/cjs/types/FloodFillTypes.d.ts +4 -4
- package/dist/cjs/types/LabelmapToolOperationData.d.ts +7 -2
- package/dist/cjs/types/index.d.ts +2 -1
- package/dist/cjs/utilities/math/ellipse/getCanvasEllipseCorners.d.ts +2 -3
- package/dist/cjs/utilities/math/ellipse/index.d.ts +2 -2
- package/dist/cjs/utilities/math/ellipse/index.js +26 -2
- package/dist/cjs/utilities/math/ellipse/index.js.map +1 -1
- package/dist/cjs/utilities/math/ellipse/pointInEllipse.d.ts +4 -1
- package/dist/cjs/utilities/math/ellipse/pointInEllipse.js +30 -17
- package/dist/cjs/utilities/math/ellipse/pointInEllipse.js.map +1 -1
- package/dist/cjs/utilities/math/sphere/pointInSphere.d.ts +1 -0
- package/dist/cjs/utilities/math/sphere/pointInSphere.js +2 -1
- package/dist/cjs/utilities/math/sphere/pointInSphere.js.map +1 -1
- package/dist/cjs/utilities/segmentation/brushThresholdForToolGroup.d.ts +1 -1
- package/dist/cjs/utilities/segmentation/brushThresholdForToolGroup.js +5 -5
- package/dist/cjs/utilities/segmentation/brushThresholdForToolGroup.js.map +1 -1
- package/dist/esm/drawingSvg/drawEllipse.js +1 -1
- package/dist/esm/drawingSvg/drawEllipse.js.map +1 -1
- package/dist/esm/drawingSvg/drawEllipseByCoordinates.js +2 -3
- package/dist/esm/drawingSvg/drawEllipseByCoordinates.js.map +1 -1
- package/dist/esm/enums/StrategyCallbacks.js +15 -0
- package/dist/esm/enums/StrategyCallbacks.js.map +1 -0
- package/dist/esm/enums/index.js +2 -1
- package/dist/esm/enums/index.js.map +1 -1
- package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.js +17 -7
- package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.js.map +1 -1
- package/dist/esm/eventDispatchers/shared/getActiveToolForKeyboardEvent.js +4 -1
- package/dist/esm/eventDispatchers/shared/getActiveToolForKeyboardEvent.js.map +1 -1
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.js +29 -0
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.js.map +1 -0
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -1
- package/dist/esm/stateManagement/segmentation/config/segmentationColor.js +8 -1
- package/dist/esm/stateManagement/segmentation/config/segmentationColor.js.map +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js +1 -2
- package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
- package/dist/esm/tools/base/BaseTool.js +5 -1
- package/dist/esm/tools/base/BaseTool.js.map +1 -1
- package/dist/esm/tools/segmentation/BrushTool.js +208 -87
- package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
- package/dist/esm/tools/segmentation/CircleScissorsTool.js +3 -0
- package/dist/esm/tools/segmentation/CircleScissorsTool.js.map +1 -1
- package/dist/esm/tools/segmentation/SphereScissorsTool.js +3 -0
- package/dist/esm/tools/segmentation/SphereScissorsTool.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +136 -0
- package/dist/esm/tools/segmentation/strategies/BrushStrategy.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +48 -0
- package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +35 -0
- package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/erase.js +7 -0
- package/dist/esm/tools/segmentation/strategies/compositions/erase.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/index.js +19 -0
- package/dist/esm/tools/segmentation/strategies/compositions/index.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/islandRemoval.js +124 -0
- package/dist/esm/tools/segmentation/strategies/compositions/islandRemoval.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/preview.js +77 -0
- package/dist/esm/tools/segmentation/strategies/compositions/preview.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/regionFill.js +21 -0
- package/dist/esm/tools/segmentation/strategies/compositions/regionFill.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +28 -0
- package/dist/esm/tools/segmentation/strategies/compositions/setValue.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/compositions/threshold.js +19 -0
- package/dist/esm/tools/segmentation/strategies/compositions/threshold.js.map +1 -0
- package/dist/esm/tools/segmentation/strategies/eraseCircle.js +6 -8
- package/dist/esm/tools/segmentation/strategies/eraseCircle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/eraseSphere.js +6 -7
- package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillCircle.js +64 -88
- package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillRectangle.js +3 -9
- package/dist/esm/tools/segmentation/strategies/fillRectangle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillSphere.js +53 -64
- package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +7 -1
- package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js +2 -2
- package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
- package/dist/esm/utilities/math/ellipse/index.js +2 -2
- package/dist/esm/utilities/math/ellipse/index.js.map +1 -1
- package/dist/esm/utilities/math/ellipse/pointInEllipse.js +28 -16
- package/dist/esm/utilities/math/ellipse/pointInEllipse.js.map +1 -1
- package/dist/esm/utilities/math/sphere/pointInSphere.js +2 -1
- package/dist/esm/utilities/math/sphere/pointInSphere.js.map +1 -1
- package/dist/esm/utilities/segmentation/brushThresholdForToolGroup.js +11 -5
- package/dist/esm/utilities/segmentation/brushThresholdForToolGroup.js.map +1 -1
- package/dist/types/drawingSvg/drawEllipseByCoordinates.d.ts.map +1 -1
- package/dist/types/enums/StrategyCallbacks.d.ts +14 -0
- package/dist/types/enums/StrategyCallbacks.d.ts.map +1 -0
- package/dist/types/enums/index.d.ts +2 -1
- package/dist/types/eventDispatchers/keyboardEventHandlers/keyDown.d.ts.map +1 -1
- package/dist/types/eventDispatchers/shared/getActiveToolForKeyboardEvent.d.ts.map +1 -1
- package/dist/types/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.d.ts +4 -0
- package/dist/types/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.d.ts.map +1 -0
- package/dist/types/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts.map +1 -1
- package/dist/types/stateManagement/segmentation/config/segmentationColor.d.ts.map +1 -1
- package/dist/types/tools/annotation/EllipticalROITool.d.ts.map +1 -1
- package/dist/types/tools/base/AnnotationTool.d.ts.map +1 -1
- package/dist/types/tools/base/BaseTool.d.ts +2 -0
- package/dist/types/tools/base/BaseTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/BrushTool.d.ts +45 -3
- package/dist/types/tools/segmentation/BrushTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/CircleScissorsTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/SphereScissorsTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/BrushStrategy.d.ts +88 -0
- package/dist/types/tools/segmentation/strategies/BrushStrategy.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/determineSegmentIndex.d.ts +7 -0
- package/dist/types/tools/segmentation/strategies/compositions/determineSegmentIndex.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/dynamicThreshold.d.ts +7 -0
- package/dist/types/tools/segmentation/strategies/compositions/dynamicThreshold.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/erase.d.ts +6 -0
- package/dist/types/tools/segmentation/strategies/compositions/erase.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/index.d.ts +36 -0
- package/dist/types/tools/segmentation/strategies/compositions/index.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/islandRemoval.d.ts +6 -0
- package/dist/types/tools/segmentation/strategies/compositions/islandRemoval.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/preview.d.ts +9 -0
- package/dist/types/tools/segmentation/strategies/compositions/preview.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/regionFill.d.ts +6 -0
- package/dist/types/tools/segmentation/strategies/compositions/regionFill.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/setValue.d.ts +9 -0
- package/dist/types/tools/segmentation/strategies/compositions/setValue.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/compositions/threshold.d.ts +6 -0
- package/dist/types/tools/segmentation/strategies/compositions/threshold.d.ts.map +1 -0
- package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts +2 -7
- package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts +2 -7
- package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/fillCircle.d.ts +13 -8
- package/dist/types/tools/segmentation/strategies/fillCircle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/fillSphere.d.ts +6 -9
- package/dist/types/tools/segmentation/strategies/fillSphere.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts +3 -0
- package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +2 -2
- package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts.map +1 -1
- package/dist/types/types/BoundsIJK.d.ts +1 -1
- package/dist/types/types/BoundsIJK.d.ts.map +1 -1
- package/dist/types/types/FloodFillTypes.d.ts +4 -4
- package/dist/types/types/FloodFillTypes.d.ts.map +1 -1
- package/dist/types/types/LabelmapToolOperationData.d.ts +7 -2
- package/dist/types/types/LabelmapToolOperationData.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +2 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utilities/math/ellipse/getCanvasEllipseCorners.d.ts +2 -3
- package/dist/types/utilities/math/ellipse/getCanvasEllipseCorners.d.ts.map +1 -1
- package/dist/types/utilities/math/ellipse/index.d.ts +2 -2
- package/dist/types/utilities/math/ellipse/index.d.ts.map +1 -1
- package/dist/types/utilities/math/ellipse/pointInEllipse.d.ts +4 -1
- package/dist/types/utilities/math/ellipse/pointInEllipse.d.ts.map +1 -1
- package/dist/types/utilities/math/sphere/pointInSphere.d.ts +1 -0
- package/dist/types/utilities/math/sphere/pointInSphere.d.ts.map +1 -1
- package/dist/types/utilities/segmentation/brushThresholdForToolGroup.d.ts +1 -1
- package/dist/types/utilities/segmentation/brushThresholdForToolGroup.d.ts.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
- package/src/drawingSvg/drawEllipse.ts +8 -8
- package/src/drawingSvg/drawEllipseByCoordinates.ts +4 -4
- package/src/enums/StrategyCallbacks.ts +52 -0
- package/src/enums/index.js +2 -0
- package/src/eventDispatchers/keyboardEventHandlers/keyDown.ts +22 -11
- package/src/eventDispatchers/shared/getActiveToolForKeyboardEvent.ts +6 -2
- package/src/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.ts +53 -0
- package/src/eventDispatchers/shared/getToolsWithActionsForMouseEvent.ts +0 -2
- package/src/stateManagement/segmentation/config/segmentationColor.ts +8 -1
- package/src/tools/annotation/EllipticalROITool.ts +1 -3
- package/src/tools/base/AnnotationTool.ts +0 -1
- package/src/tools/base/BaseTool.ts +32 -2
- package/src/tools/segmentation/BrushTool.ts +298 -68
- package/src/tools/segmentation/CircleScissorsTool.ts +3 -1
- package/src/tools/segmentation/SphereScissorsTool.ts +3 -0
- package/src/tools/segmentation/strategies/BrushStrategy.ts +364 -0
- package/src/tools/segmentation/strategies/compositions/determineSegmentIndex.ts +86 -0
- package/src/tools/segmentation/strategies/compositions/dynamicThreshold.ts +58 -0
- package/src/tools/segmentation/strategies/compositions/erase.ts +11 -0
- package/src/tools/segmentation/strategies/compositions/index.ts +19 -0
- package/src/tools/segmentation/strategies/compositions/islandRemoval.ts +179 -0
- package/src/tools/segmentation/strategies/compositions/preview.ts +138 -0
- package/src/tools/segmentation/strategies/compositions/regionFill.ts +45 -0
- package/src/tools/segmentation/strategies/compositions/setValue.ts +50 -0
- package/src/tools/segmentation/strategies/compositions/threshold.ts +35 -0
- package/src/tools/segmentation/strategies/eraseCircle.ts +10 -19
- package/src/tools/segmentation/strategies/eraseSphere.ts +10 -18
- package/src/tools/segmentation/strategies/fillCircle.ts +141 -164
- package/src/tools/segmentation/strategies/fillRectangle.ts +3 -13
- package/src/tools/segmentation/strategies/fillSphere.ts +105 -120
- package/src/tools/segmentation/strategies/utils/getStrategyData.ts +15 -1
- package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +5 -5
- package/src/types/BoundsIJK.ts +1 -1
- package/src/types/FloodFillTypes.ts +4 -4
- package/src/types/LabelmapToolOperationData.ts +20 -1
- package/src/types/index.ts +2 -0
- package/src/utilities/math/ellipse/getCanvasEllipseCorners.ts +2 -2
- package/src/utilities/math/ellipse/index.ts +2 -2
- package/src/utilities/math/ellipse/pointInEllipse.ts +52 -18
- package/src/utilities/math/sphere/pointInSphere.ts +10 -2
- package/src/utilities/segmentation/brushThresholdForToolGroup.ts +12 -5
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const core_1 = require("@cornerstonejs/core");
|
|
7
|
+
const triggerSegmentationEvents_1 = require("../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
8
|
+
const compositions_1 = __importDefault(require("./compositions"));
|
|
9
|
+
const getStrategyData_1 = require("./utils/getStrategyData");
|
|
10
|
+
const stackVolumeCheck_1 = require("./utils/stackVolumeCheck");
|
|
11
|
+
const enums_1 = require("../../../enums");
|
|
12
|
+
const { VoxelManager } = core_1.utilities;
|
|
13
|
+
class BrushStrategy {
|
|
14
|
+
constructor(name, ...initializers) {
|
|
15
|
+
this._initialize = [];
|
|
16
|
+
this._fill = [];
|
|
17
|
+
this._onInteractionStart = [];
|
|
18
|
+
this.fill = (enabledElement, operationData) => {
|
|
19
|
+
const initializedData = this.initialize(enabledElement, operationData);
|
|
20
|
+
const { strategySpecificConfiguration = {}, centerIJK } = initializedData;
|
|
21
|
+
if (core_1.utilities.isEqual(centerIJK, strategySpecificConfiguration.centerIJK)) {
|
|
22
|
+
return operationData.preview;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
strategySpecificConfiguration.centerIJK = centerIJK;
|
|
26
|
+
}
|
|
27
|
+
this._fill.forEach((func) => func(initializedData));
|
|
28
|
+
const { segmentationVoxelManager, previewVoxelManager, previewSegmentIndex, } = initializedData;
|
|
29
|
+
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(initializedData.segmentationId, segmentationVoxelManager.getArrayOfSlices());
|
|
30
|
+
if (!previewSegmentIndex || !previewVoxelManager.modifiedSlices.size) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return initializedData.preview || initializedData;
|
|
34
|
+
};
|
|
35
|
+
this.onInteractionStart = (enabledElement, operationData) => {
|
|
36
|
+
const { preview } = operationData;
|
|
37
|
+
if (preview === null || preview === void 0 ? void 0 : preview.isPreviewFromHover) {
|
|
38
|
+
preview.isPreviewFromHover = false;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const initializedData = this.initialize(enabledElement, operationData);
|
|
42
|
+
this._onInteractionStart.forEach((func) => func.call(this, initializedData));
|
|
43
|
+
};
|
|
44
|
+
this.configurationName = name;
|
|
45
|
+
this.compositions = initializers;
|
|
46
|
+
initializers.forEach((initializer) => {
|
|
47
|
+
const result = typeof initializer === 'function' ? initializer() : initializer;
|
|
48
|
+
if (!result) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
for (const key in result) {
|
|
52
|
+
if (!BrushStrategy.childFunctions[key]) {
|
|
53
|
+
throw new Error(`Didn't find ${key} as a brush strategy`);
|
|
54
|
+
}
|
|
55
|
+
BrushStrategy.childFunctions[key](this, result[key]);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.strategyFunction = (enabledElement, operationData) => this.fill(enabledElement, operationData);
|
|
59
|
+
for (const key of Object.keys(BrushStrategy.childFunctions)) {
|
|
60
|
+
this.strategyFunction[key] = this[key];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
initialize(enabledElement, operationData) {
|
|
64
|
+
var _a;
|
|
65
|
+
const { viewport } = enabledElement;
|
|
66
|
+
const data = (0, getStrategyData_1.getStrategyData)({ operationData, viewport });
|
|
67
|
+
if (!data) {
|
|
68
|
+
console.warn('No data found for BrushStrategy');
|
|
69
|
+
return operationData.preview;
|
|
70
|
+
}
|
|
71
|
+
if ((0, stackVolumeCheck_1.isVolumeSegmentation)(operationData)) {
|
|
72
|
+
const { referencedVolumeId, volumeId } = operationData;
|
|
73
|
+
const imageVolume = core_1.cache.getVolume(referencedVolumeId);
|
|
74
|
+
const segmentation = core_1.cache.getVolume(volumeId);
|
|
75
|
+
if (!core_1.utilities.isEqual(segmentation.dimensions, imageVolume.dimensions) ||
|
|
76
|
+
!core_1.utilities.isEqual(segmentation.direction, imageVolume.direction)) {
|
|
77
|
+
throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const { imageVoxelManager, segmentationVoxelManager, segmentationImageData, } = data;
|
|
81
|
+
const previewVoxelManager = ((_a = operationData.preview) === null || _a === void 0 ? void 0 : _a.previewVoxelManager) ||
|
|
82
|
+
VoxelManager.createHistoryVoxelManager(segmentationVoxelManager);
|
|
83
|
+
const previewEnabled = !!operationData.previewColors;
|
|
84
|
+
const previewSegmentIndex = previewEnabled ? 255 : undefined;
|
|
85
|
+
const initializedData = Object.assign(Object.assign({ previewSegmentIndex }, operationData), { enabledElement,
|
|
86
|
+
imageVoxelManager,
|
|
87
|
+
segmentationVoxelManager,
|
|
88
|
+
segmentationImageData,
|
|
89
|
+
previewVoxelManager,
|
|
90
|
+
viewport, centerWorld: null, brushStrategy: this });
|
|
91
|
+
this._initialize.forEach((func) => func(initializedData));
|
|
92
|
+
return initializedData;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.default = BrushStrategy;
|
|
96
|
+
BrushStrategy.COMPOSITIONS = compositions_1.default;
|
|
97
|
+
BrushStrategy.childFunctions = {
|
|
98
|
+
[enums_1.StrategyCallbacks.OnInteractionStart]: addListMethod(enums_1.StrategyCallbacks.OnInteractionStart, enums_1.StrategyCallbacks.Initialize),
|
|
99
|
+
[enums_1.StrategyCallbacks.OnInteractionEnd]: addListMethod(enums_1.StrategyCallbacks.OnInteractionEnd, enums_1.StrategyCallbacks.Initialize),
|
|
100
|
+
[enums_1.StrategyCallbacks.Fill]: addListMethod(enums_1.StrategyCallbacks.Fill),
|
|
101
|
+
[enums_1.StrategyCallbacks.Initialize]: addListMethod(enums_1.StrategyCallbacks.Initialize),
|
|
102
|
+
[enums_1.StrategyCallbacks.CreateIsInThreshold]: addSingletonMethod(enums_1.StrategyCallbacks.CreateIsInThreshold),
|
|
103
|
+
[enums_1.StrategyCallbacks.AcceptPreview]: addListMethod(enums_1.StrategyCallbacks.AcceptPreview, enums_1.StrategyCallbacks.Initialize),
|
|
104
|
+
[enums_1.StrategyCallbacks.RejectPreview]: addListMethod(enums_1.StrategyCallbacks.RejectPreview, enums_1.StrategyCallbacks.Initialize),
|
|
105
|
+
[enums_1.StrategyCallbacks.INTERNAL_setValue]: addSingletonMethod(enums_1.StrategyCallbacks.INTERNAL_setValue),
|
|
106
|
+
[enums_1.StrategyCallbacks.Preview]: addSingletonMethod(enums_1.StrategyCallbacks.Preview, false),
|
|
107
|
+
compositions: null,
|
|
108
|
+
};
|
|
109
|
+
function addListMethod(name, createInitialized) {
|
|
110
|
+
const listName = `_${name}`;
|
|
111
|
+
return (brushStrategy, func) => {
|
|
112
|
+
brushStrategy[listName] || (brushStrategy[listName] = []);
|
|
113
|
+
brushStrategy[listName].push(func);
|
|
114
|
+
brushStrategy[name] || (brushStrategy[name] = createInitialized
|
|
115
|
+
? (enabledElement, operationData) => {
|
|
116
|
+
const initializedData = brushStrategy[createInitialized](enabledElement, operationData);
|
|
117
|
+
brushStrategy[listName].forEach((func) => func.call(brushStrategy, initializedData));
|
|
118
|
+
}
|
|
119
|
+
: (operationData) => {
|
|
120
|
+
brushStrategy[listName].forEach((func) => func.call(brushStrategy, operationData));
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function addSingletonMethod(name, isInitialized = true) {
|
|
125
|
+
return (brushStrategy, func) => {
|
|
126
|
+
if (brushStrategy[name]) {
|
|
127
|
+
throw new Error(`The singleton method ${name} already exists`);
|
|
128
|
+
}
|
|
129
|
+
brushStrategy[name] = isInitialized
|
|
130
|
+
? func
|
|
131
|
+
: (enabledElement, operationData) => {
|
|
132
|
+
operationData.enabledElement = enabledElement;
|
|
133
|
+
return func.call(brushStrategy, operationData);
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=BrushStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrushStrategy.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/BrushStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const pointInShapeCallback_1 = __importDefault(require("../../../../utilities/pointInShapeCallback"));
|
|
7
|
+
const StrategyCallbacks_1 = __importDefault(require("../../../../enums/StrategyCallbacks"));
|
|
8
|
+
exports.default = {
|
|
9
|
+
[StrategyCallbacks_1.default.Initialize]: (operationData) => {
|
|
10
|
+
const { strategySpecificConfiguration } = operationData;
|
|
11
|
+
if (!strategySpecificConfiguration) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const { centerSegmentIndex } = strategySpecificConfiguration;
|
|
15
|
+
if (centerSegmentIndex) {
|
|
16
|
+
operationData.segmentIndex = centerSegmentIndex.segmentIndex;
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
[StrategyCallbacks_1.default.OnInteractionStart]: (operationData) => {
|
|
20
|
+
const { segmentIndex, previewSegmentIndex, segmentationVoxelManager: segmentationVoxelManager, centerIJK, strategySpecificConfiguration, imageVoxelManager: imageVoxelManager, segmentationImageData, preview, } = operationData;
|
|
21
|
+
if (!(strategySpecificConfiguration === null || strategySpecificConfiguration === void 0 ? void 0 : strategySpecificConfiguration.useCenterSegmentIndex)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
delete strategySpecificConfiguration.centerSegmentIndex;
|
|
25
|
+
let hasSegmentIndex = false;
|
|
26
|
+
let hasPreviewIndex = false;
|
|
27
|
+
const callback = ({ value }) => {
|
|
28
|
+
hasSegmentIndex || (hasSegmentIndex = value === segmentIndex);
|
|
29
|
+
hasPreviewIndex || (hasPreviewIndex = value === previewSegmentIndex);
|
|
30
|
+
};
|
|
31
|
+
(0, pointInShapeCallback_1.default)(segmentationImageData, imageVoxelManager.isInObject, callback, segmentationVoxelManager.boundsIJK);
|
|
32
|
+
if (!hasSegmentIndex && !hasPreviewIndex) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
let existingValue = segmentationVoxelManager.getAtIJKPoint(centerIJK);
|
|
36
|
+
if (existingValue === previewSegmentIndex) {
|
|
37
|
+
if (preview) {
|
|
38
|
+
existingValue = preview.segmentIndex;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (hasPreviewIndex) {
|
|
45
|
+
existingValue = null;
|
|
46
|
+
}
|
|
47
|
+
operationData.segmentIndex = existingValue;
|
|
48
|
+
strategySpecificConfiguration.centerSegmentIndex = {
|
|
49
|
+
segmentIndex: existingValue,
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=determineSegmentIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"determineSegmentIndex.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/determineSegmentIndex.ts"],"names":[],"mappings":";;;;;AACA,sGAA8E;AAC9E,4FAAoE;AAkBpE,kBAAe;IACb,CAAC,2BAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,aAAuC,EAAE,EAAE;QAC1E,MAAM,EAAE,6BAA6B,EAAE,GAAG,aAAa,CAAC;QACxD,IAAI,CAAC,6BAA6B,EAAE;YAClC,OAAO;SACR;QACD,MAAM,EAAE,kBAAkB,EAAE,GAAG,6BAA6B,CAAC;QAC7D,IAAI,kBAAkB,EAAE;YACtB,aAAa,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC;SAC9D;IACH,CAAC;IAED,CAAC,2BAAiB,CAAC,kBAAkB,CAAC,EAAE,CACtC,aAAuC,EACvC,EAAE;QACF,MAAM,EACJ,YAAY,EACZ,mBAAmB,EACnB,wBAAwB,EAAE,wBAAwB,EAClD,SAAS,EACT,6BAA6B,EAC7B,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EACrB,OAAO,GACR,GAAG,aAAa,CAAC;QAClB,IAAI,CAAC,CAAA,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,qBAAqB,CAAA,EAAE;YACzD,OAAO;SACR;QAED,OAAO,6BAA6B,CAAC,kBAAkB,CAAC;QAExD,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7B,eAAe,KAAf,eAAe,GAAK,KAAK,KAAK,YAAY,EAAC;YAC3C,eAAe,KAAf,eAAe,GAAK,KAAK,KAAK,mBAAmB,EAAC;QACpD,CAAC,CAAC;QAEF,IAAA,8BAAoB,EAClB,qBAAgC,EAChC,iBAAiB,CAAC,UAAU,EAC5B,QAAQ,EACR,wBAAwB,CAAC,SAAS,CACnC,CAAC;QAEF,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE;YACxC,OAAO;SACR;QAED,IAAI,aAAa,GAAG,wBAAwB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,aAAa,KAAK,mBAAmB,EAAE;YACzC,IAAI,OAAO,EAAE;gBACX,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;aACtC;iBAAM;gBACL,OAAO;aACR;SACF;aAAM,IAAI,eAAe,EAAE;YAE1B,aAAa,GAAG,IAAI,CAAC;SACtB;QACD,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC;QAC3C,6BAA6B,CAAC,kBAAkB,GAAG;YACjD,YAAY,EAAE,aAAa;SAC5B,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const StrategyCallbacks_1 = __importDefault(require("../../../../enums/StrategyCallbacks"));
|
|
7
|
+
exports.default = {
|
|
8
|
+
[StrategyCallbacks_1.default.Initialize]: (operationData) => {
|
|
9
|
+
const { centerIJK, strategySpecificConfiguration, segmentationVoxelManager: segmentationVoxelManager, imageVoxelManager: imageVoxelManager, segmentIndex, } = operationData;
|
|
10
|
+
const { THRESHOLD } = strategySpecificConfiguration;
|
|
11
|
+
if (!(THRESHOLD === null || THRESHOLD === void 0 ? void 0 : THRESHOLD.isDynamic) || !centerIJK || !segmentIndex) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const { boundsIJK } = segmentationVoxelManager;
|
|
15
|
+
const { threshold: oldThreshold, dynamicRadius = 0 } = THRESHOLD;
|
|
16
|
+
const useDelta = oldThreshold ? 0 : dynamicRadius;
|
|
17
|
+
const nestedBounds = boundsIJK.map((ijk, idx) => {
|
|
18
|
+
const [min, max] = ijk;
|
|
19
|
+
return [
|
|
20
|
+
Math.max(min, centerIJK[idx] - useDelta),
|
|
21
|
+
Math.min(max, centerIJK[idx] + useDelta),
|
|
22
|
+
];
|
|
23
|
+
});
|
|
24
|
+
const threshold = oldThreshold || [Infinity, -Infinity];
|
|
25
|
+
const callback = ({ value }) => {
|
|
26
|
+
threshold[0] = Math.min(value, threshold[0]);
|
|
27
|
+
threshold[1] = Math.max(value, threshold[1]);
|
|
28
|
+
};
|
|
29
|
+
imageVoxelManager.forEach(callback, { boundsIJK: nestedBounds });
|
|
30
|
+
operationData.strategySpecificConfiguration.THRESHOLD.threshold = threshold;
|
|
31
|
+
},
|
|
32
|
+
[StrategyCallbacks_1.default.OnInteractionStart]: (operationData) => {
|
|
33
|
+
var _a;
|
|
34
|
+
const { strategySpecificConfiguration, preview } = operationData;
|
|
35
|
+
if (!((_a = strategySpecificConfiguration === null || strategySpecificConfiguration === void 0 ? void 0 : strategySpecificConfiguration.THRESHOLD) === null || _a === void 0 ? void 0 : _a.isDynamic) && !preview) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
strategySpecificConfiguration.THRESHOLD.threshold = null;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=dynamicThreshold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamicThreshold.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/dynamicThreshold.ts"],"names":[],"mappings":";;;;;AAEA,4FAAoE;AAUpE,kBAAe;IACb,CAAC,2BAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,aAAuC,EAAE,EAAE;QAC1E,MAAM,EACJ,SAAS,EACT,6BAA6B,EAC7B,wBAAwB,EAAE,wBAAwB,EAClD,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,GACb,GAAG,aAAa,CAAC;QAClB,MAAM,EAAE,SAAS,EAAE,GAAG,6BAA6B,CAAC;QAEpD,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,CAAA,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE;YACxD,OAAO;SACR;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,wBAAwB,CAAC;QAC/C,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;QACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAClD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YACvB,OAAO;gBACL,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACzC,CAAC;QACJ,CAAC,CAAc,CAAC;QAEhB,MAAM,SAAS,GAAG,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7B,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC;QACF,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAEjE,aAAa,CAAC,6BAA6B,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9E,CAAC;IAED,CAAC,2BAAiB,CAAC,kBAAkB,CAAC,EAAE,CACtC,aAAuC,EACvC,EAAE;;QACF,MAAM,EAAE,6BAA6B,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC;QACjE,IAAI,CAAC,CAAA,MAAA,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,SAAS,0CAAE,SAAS,CAAA,IAAI,CAAC,OAAO,EAAE;YACpE,OAAO;SACR;QACD,6BAA6B,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;IAC3D,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const StrategyCallbacks_1 = __importDefault(require("../../../../enums/StrategyCallbacks"));
|
|
7
|
+
exports.default = {
|
|
8
|
+
[StrategyCallbacks_1.default.Initialize]: (operationData) => {
|
|
9
|
+
operationData.segmentIndex = 0;
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=erase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erase.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/erase.ts"],"names":[],"mappings":";;;;;AACA,4FAAoE;AAKpE,kBAAe;IACb,CAAC,2BAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,aAAuC,EAAE,EAAE;QAC1E,aAAa,CAAC,YAAY,GAAG,CAAC,CAAC;IACjC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
determineSegmentIndex: {
|
|
3
|
+
initialize: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
4
|
+
onInteractionStart: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
5
|
+
};
|
|
6
|
+
dynamicThreshold: {
|
|
7
|
+
initialize: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
8
|
+
onInteractionStart: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
9
|
+
};
|
|
10
|
+
erase: {
|
|
11
|
+
initialize: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
12
|
+
};
|
|
13
|
+
islandRemoval: {
|
|
14
|
+
onInteractionEnd: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
15
|
+
};
|
|
16
|
+
preview: {
|
|
17
|
+
preview: (operationData: import("../BrushStrategy").InitializedOperationData) => any;
|
|
18
|
+
initialize: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
19
|
+
acceptPreview: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
20
|
+
rejectPreview: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
21
|
+
};
|
|
22
|
+
regionFill: {
|
|
23
|
+
fill: (operationData: import("../BrushStrategy").InitializedOperationData) => void;
|
|
24
|
+
};
|
|
25
|
+
setValue: {
|
|
26
|
+
setValue: (operationData: import("../BrushStrategy").InitializedOperationData, { value, index }: {
|
|
27
|
+
value: any;
|
|
28
|
+
index: any;
|
|
29
|
+
}) => void;
|
|
30
|
+
};
|
|
31
|
+
threshold: {
|
|
32
|
+
createIsInThreshold: (operationData: import("../BrushStrategy").InitializedOperationData) => (index: any) => boolean;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export default _default;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const determineSegmentIndex_1 = __importDefault(require("./determineSegmentIndex"));
|
|
7
|
+
const dynamicThreshold_1 = __importDefault(require("./dynamicThreshold"));
|
|
8
|
+
const erase_1 = __importDefault(require("./erase"));
|
|
9
|
+
const islandRemoval_1 = __importDefault(require("./islandRemoval"));
|
|
10
|
+
const preview_1 = __importDefault(require("./preview"));
|
|
11
|
+
const regionFill_1 = __importDefault(require("./regionFill"));
|
|
12
|
+
const setValue_1 = __importDefault(require("./setValue"));
|
|
13
|
+
const threshold_1 = __importDefault(require("./threshold"));
|
|
14
|
+
exports.default = {
|
|
15
|
+
determineSegmentIndex: determineSegmentIndex_1.default,
|
|
16
|
+
dynamicThreshold: dynamicThreshold_1.default,
|
|
17
|
+
erase: erase_1.default,
|
|
18
|
+
islandRemoval: islandRemoval_1.default,
|
|
19
|
+
preview: preview_1.default,
|
|
20
|
+
regionFill: regionFill_1.default,
|
|
21
|
+
setValue: setValue_1.default,
|
|
22
|
+
threshold: threshold_1.default,
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/index.ts"],"names":[],"mappings":";;;;;AAAA,oFAA4D;AAC5D,0EAAkD;AAClD,oDAA4B;AAC5B,oEAA4C;AAC5C,wDAAgC;AAChC,8DAAsC;AACtC,0DAAkC;AAClC,4DAAoC;AAEpC,kBAAe;IACb,qBAAqB,EAArB,+BAAqB;IACrB,gBAAgB,EAAhB,0BAAgB;IAChB,KAAK,EAAL,eAAK;IACL,aAAa,EAAb,uBAAa;IACb,OAAO,EAAP,iBAAO;IACP,UAAU,EAAV,oBAAU;IACV,QAAQ,EAAR,kBAAQ;IACR,SAAS,EAAT,mBAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const floodFill_1 = __importDefault(require("../../../../utilities/segmentation/floodFill"));
|
|
7
|
+
const triggerSegmentationEvents_1 = require("../../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
8
|
+
const StrategyCallbacks_1 = __importDefault(require("../../../../enums/StrategyCallbacks"));
|
|
9
|
+
exports.default = {
|
|
10
|
+
[StrategyCallbacks_1.default.OnInteractionEnd]: (operationData) => {
|
|
11
|
+
const { previewVoxelManager: previewVoxelManager, segmentationVoxelManager: segmentationVoxelManager, strategySpecificConfiguration, previewSegmentIndex, segmentIndex, } = operationData;
|
|
12
|
+
if (!strategySpecificConfiguration.THRESHOLD || segmentIndex === null) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const clickedPoints = previewVoxelManager.getPoints();
|
|
16
|
+
if (!(clickedPoints === null || clickedPoints === void 0 ? void 0 : clickedPoints.length)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (previewSegmentIndex === undefined) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const boundsIJK = previewVoxelManager
|
|
23
|
+
.getBoundsIJK()
|
|
24
|
+
.map((bound, i) => [
|
|
25
|
+
Math.min(bound[0], ...clickedPoints.map((point) => point[i])),
|
|
26
|
+
Math.max(bound[1], ...clickedPoints.map((point) => point[i])),
|
|
27
|
+
]);
|
|
28
|
+
if (boundsIJK.find((it) => it[0] < 0 || it[1] > 65535)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const floodedSet = new Set();
|
|
32
|
+
const getter = (i, j, k) => {
|
|
33
|
+
if (i < boundsIJK[0][0] ||
|
|
34
|
+
i > boundsIJK[0][1] ||
|
|
35
|
+
j < boundsIJK[1][0] ||
|
|
36
|
+
j > boundsIJK[1][1] ||
|
|
37
|
+
k < boundsIJK[2][0] ||
|
|
38
|
+
k > boundsIJK[2][1]) {
|
|
39
|
+
return -1;
|
|
40
|
+
}
|
|
41
|
+
const index = segmentationVoxelManager.toIndex([i, j, k]);
|
|
42
|
+
if (floodedSet.has(index)) {
|
|
43
|
+
return -2;
|
|
44
|
+
}
|
|
45
|
+
const oldVal = segmentationVoxelManager.getAtIndex(index);
|
|
46
|
+
const isIn = oldVal === previewSegmentIndex || oldVal === segmentIndex ? 1 : 0;
|
|
47
|
+
if (!isIn) {
|
|
48
|
+
segmentationVoxelManager.addPoint(index);
|
|
49
|
+
}
|
|
50
|
+
return isIn;
|
|
51
|
+
};
|
|
52
|
+
let floodedCount = 0;
|
|
53
|
+
const onFlood = (i, j, k) => {
|
|
54
|
+
const index = segmentationVoxelManager.toIndex([i, j, k]);
|
|
55
|
+
if (floodedSet.has(index)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
previewVoxelManager.setAtIJK(i, j, k, previewSegmentIndex);
|
|
59
|
+
floodedSet.add(index);
|
|
60
|
+
floodedCount++;
|
|
61
|
+
};
|
|
62
|
+
clickedPoints.forEach((clickedPoint, index) => {
|
|
63
|
+
if (getter(...clickedPoint) === 1) {
|
|
64
|
+
(0, floodFill_1.default)(getter, clickedPoint, {
|
|
65
|
+
onFlood,
|
|
66
|
+
diagonals: true,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
let clearedCount = 0;
|
|
71
|
+
let previewCount = 0;
|
|
72
|
+
const callback = ({ index, pointIJK, value: trackValue }) => {
|
|
73
|
+
const value = segmentationVoxelManager.getAtIndex(index);
|
|
74
|
+
if (floodedSet.has(index)) {
|
|
75
|
+
previewCount++;
|
|
76
|
+
const newValue = trackValue === segmentIndex ? segmentIndex : previewSegmentIndex;
|
|
77
|
+
previewVoxelManager.setAtIJKPoint(pointIJK, newValue);
|
|
78
|
+
}
|
|
79
|
+
else if (value === previewSegmentIndex) {
|
|
80
|
+
clearedCount++;
|
|
81
|
+
const newValue = trackValue !== null && trackValue !== void 0 ? trackValue : 0;
|
|
82
|
+
previewVoxelManager.setAtIJKPoint(pointIJK, newValue);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
previewVoxelManager.forEach(callback, {});
|
|
86
|
+
if (floodedCount - previewCount !== 0) {
|
|
87
|
+
console.warn('There were flooded=', floodedCount, 'cleared=', clearedCount, 'preview count=', previewCount, 'not handled', floodedCount - previewCount);
|
|
88
|
+
}
|
|
89
|
+
const islandMap = new Set(segmentationVoxelManager.points || []);
|
|
90
|
+
floodedSet.clear();
|
|
91
|
+
for (const index of islandMap.keys()) {
|
|
92
|
+
if (floodedSet.has(index)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
let isInternal = true;
|
|
96
|
+
const internalSet = new Set();
|
|
97
|
+
const onFloodInternal = (i, j, k) => {
|
|
98
|
+
const floodIndex = previewVoxelManager.toIndex([i, j, k]);
|
|
99
|
+
floodedSet.add(floodIndex);
|
|
100
|
+
if ((boundsIJK[0][0] !== boundsIJK[0][1] &&
|
|
101
|
+
(i === boundsIJK[0][0] || i === boundsIJK[0][1])) ||
|
|
102
|
+
(boundsIJK[1][0] !== boundsIJK[1][1] &&
|
|
103
|
+
(j === boundsIJK[1][0] || j === boundsIJK[1][1])) ||
|
|
104
|
+
(boundsIJK[2][0] !== boundsIJK[2][1] &&
|
|
105
|
+
(k === boundsIJK[2][0] || k === boundsIJK[2][1]))) {
|
|
106
|
+
isInternal = false;
|
|
107
|
+
}
|
|
108
|
+
if (isInternal) {
|
|
109
|
+
internalSet.add(floodIndex);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const pointIJK = previewVoxelManager.toIJK(index);
|
|
113
|
+
if (getter(...pointIJK) !== 0) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
(0, floodFill_1.default)(getter, pointIJK, {
|
|
117
|
+
onFlood: onFloodInternal,
|
|
118
|
+
diagonals: false,
|
|
119
|
+
});
|
|
120
|
+
if (isInternal) {
|
|
121
|
+
for (const index of internalSet) {
|
|
122
|
+
previewVoxelManager.setAtIndex(index, previewSegmentIndex);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(operationData.segmentationId, previewVoxelManager.getArrayOfSlices());
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=islandRemoval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"islandRemoval.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/islandRemoval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InitializedOperationData } from '../BrushStrategy';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
preview: (operationData: InitializedOperationData) => any;
|
|
4
|
+
initialize: (operationData: InitializedOperationData) => void;
|
|
5
|
+
acceptPreview: (operationData: InitializedOperationData) => void;
|
|
6
|
+
rejectPreview: (operationData: InitializedOperationData) => void;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const triggerSegmentationEvents_1 = require("../../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
7
|
+
const segmentation_1 = require("../../../../stateManagement/segmentation");
|
|
8
|
+
const StrategyCallbacks_1 = __importDefault(require("../../../../enums/StrategyCallbacks"));
|
|
9
|
+
exports.default = {
|
|
10
|
+
[StrategyCallbacks_1.default.Preview]: function (operationData) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const { previewColors, strategySpecificConfiguration, enabledElement } = operationData;
|
|
13
|
+
if (!previewColors || !strategySpecificConfiguration) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (operationData.preview) {
|
|
17
|
+
delete operationData.preview;
|
|
18
|
+
}
|
|
19
|
+
delete strategySpecificConfiguration.centerSegmentIndex;
|
|
20
|
+
(_a = this.onInteractionStart) === null || _a === void 0 ? void 0 : _a.call(this, enabledElement, operationData);
|
|
21
|
+
const preview = this.fill(enabledElement, operationData);
|
|
22
|
+
if (preview) {
|
|
23
|
+
preview.isPreviewFromHover = true;
|
|
24
|
+
operationData.preview = preview;
|
|
25
|
+
(_b = this.onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(this, enabledElement, operationData);
|
|
26
|
+
}
|
|
27
|
+
return preview;
|
|
28
|
+
},
|
|
29
|
+
[StrategyCallbacks_1.default.Initialize]: (operationData) => {
|
|
30
|
+
const { toolGroupId, segmentIndex, segmentationRepresentationUID, previewSegmentIndex, previewColors, preview, } = operationData;
|
|
31
|
+
if (previewColors === undefined) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (preview) {
|
|
35
|
+
preview.previewVoxelManager.sourceVoxelManager =
|
|
36
|
+
operationData.segmentationVoxelManager;
|
|
37
|
+
operationData.previewVoxelManager = preview.previewVoxelManager;
|
|
38
|
+
}
|
|
39
|
+
if (segmentIndex === null || !previewSegmentIndex) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const configColor = previewColors === null || previewColors === void 0 ? void 0 : previewColors[segmentIndex];
|
|
43
|
+
const segmentColor = segmentation_1.config.color.getColorForSegmentIndex(toolGroupId, segmentationRepresentationUID, segmentIndex);
|
|
44
|
+
if (!configColor && !segmentColor) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const previewColor = configColor || segmentColor.map((it) => it * 0.9);
|
|
48
|
+
segmentation_1.config.color.setColorForSegmentIndex(toolGroupId, segmentationRepresentationUID, previewSegmentIndex, previewColor);
|
|
49
|
+
},
|
|
50
|
+
[StrategyCallbacks_1.default.AcceptPreview]: (operationData) => {
|
|
51
|
+
var _a;
|
|
52
|
+
const { segmentationVoxelManager: segmentationVoxelManager, previewVoxelManager: previewVoxelManager, previewSegmentIndex, preview, } = operationData;
|
|
53
|
+
if (previewSegmentIndex === undefined) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const segmentIndex = (_a = preview === null || preview === void 0 ? void 0 : preview.segmentIndex) !== null && _a !== void 0 ? _a : operationData.segmentIndex;
|
|
57
|
+
const tracking = previewVoxelManager;
|
|
58
|
+
if (!tracking || tracking.modifiedSlices.size === 0) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const callback = ({ index }) => {
|
|
62
|
+
const oldValue = segmentationVoxelManager.getAtIndex(index);
|
|
63
|
+
if (oldValue === previewSegmentIndex) {
|
|
64
|
+
segmentationVoxelManager.setAtIndex(index, segmentIndex);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
tracking.forEach(callback, {});
|
|
68
|
+
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(operationData.segmentationId, tracking.getArrayOfSlices());
|
|
69
|
+
tracking.clear();
|
|
70
|
+
},
|
|
71
|
+
[StrategyCallbacks_1.default.RejectPreview]: (operationData) => {
|
|
72
|
+
const { previewVoxelManager: previewVoxelManager, segmentationVoxelManager: segmentationVoxelManager, } = operationData;
|
|
73
|
+
if (previewVoxelManager.modifiedSlices.size === 0) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const callback = ({ index, value }) => {
|
|
77
|
+
segmentationVoxelManager.setAtIndex(index, value);
|
|
78
|
+
};
|
|
79
|
+
previewVoxelManager.forEach(callback);
|
|
80
|
+
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(operationData.segmentationId, previewVoxelManager.getArrayOfSlices());
|
|
81
|
+
previewVoxelManager.clear();
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/preview.ts"],"names":[],"mappings":"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"}
|