@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,27 @@
|
|
|
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.Fill]: (operationData) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const { segmentsLocked, segmentationImageData, segmentationVoxelManager: segmentationVoxelManager, previewVoxelManager: previewVoxelManager, imageVoxelManager: imageVoxelManager, brushStrategy, centerIJK, } = operationData;
|
|
12
|
+
const isWithinThreshold = (_a = brushStrategy.createIsInThreshold) === null || _a === void 0 ? void 0 : _a.call(brushStrategy, operationData);
|
|
13
|
+
const { setValue } = brushStrategy;
|
|
14
|
+
const callback = isWithinThreshold
|
|
15
|
+
? (data) => {
|
|
16
|
+
const { value, index } = data;
|
|
17
|
+
if (segmentsLocked.includes(value) || !isWithinThreshold(index)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
setValue(operationData, data);
|
|
21
|
+
}
|
|
22
|
+
: (data) => setValue(operationData, data);
|
|
23
|
+
(0, pointInShapeCallback_1.default)(segmentationImageData, imageVoxelManager.isInObject, callback, segmentationVoxelManager.boundsIJK);
|
|
24
|
+
previewVoxelManager.addPoint(centerIJK);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=regionFill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regionFill.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/regionFill.ts"],"names":[],"mappings":";;;;;AACA,sGAA8E;AAC9E,4FAAoE;AAQpE,kBAAe;IACb,CAAC,2BAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAuC,EAAE,EAAE;;QACpE,MAAM,EACJ,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EAAE,wBAAwB,EAClD,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EACb,SAAS,GACV,GAAG,aAAa,CAAC;QAClB,MAAM,iBAAiB,GACrB,MAAA,aAAa,CAAC,mBAAmB,8DAAG,aAAa,CAAC,CAAC;QACrD,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC;QAEnC,MAAM,QAAQ,GAAG,iBAAiB;YAChC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;gBACP,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;gBAC9B,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;oBAC/D,OAAO;iBACR;gBACD,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;YACH,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAE5C,IAAA,8BAAoB,EAClB,qBAAgC,EAChC,iBAAiB,CAAC,UAAU,EAC5B,QAAQ,EACR,wBAAwB,CAAC,SAAS,CACnC,CAAC;QAEF,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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.INTERNAL_setValue]: (operationData, { value, index }) => {
|
|
9
|
+
const { segmentsLocked, segmentIndex, previewVoxelManager: previewVoxelManager, previewSegmentIndex, segmentationVoxelManager: segmentationVoxelManager, } = operationData;
|
|
10
|
+
const existingValue = segmentationVoxelManager.getAtIndex(index);
|
|
11
|
+
if (segmentIndex === null) {
|
|
12
|
+
const oldValue = previewVoxelManager.getAtIndex(index);
|
|
13
|
+
if (oldValue !== undefined) {
|
|
14
|
+
previewVoxelManager.setAtIndex(index, oldValue);
|
|
15
|
+
}
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (existingValue === segmentIndex || segmentsLocked.includes(value)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (existingValue === previewSegmentIndex) {
|
|
22
|
+
if (previewVoxelManager.getAtIndex(index) === undefined) {
|
|
23
|
+
segmentationVoxelManager.setAtIndex(index, segmentIndex);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const useSegmentIndex = previewSegmentIndex !== null && previewSegmentIndex !== void 0 ? previewSegmentIndex : segmentIndex;
|
|
30
|
+
previewVoxelManager.setAtIndex(index, useSegmentIndex);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=setValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setValue.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/setValue.ts"],"names":[],"mappings":";;;;;AACA,4FAAoE;AASpE,kBAAe;IACb,CAAC,2BAAiB,CAAC,iBAAiB,CAAC,EAAE,CACrC,aAAuC,EACvC,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB,EAAE;QACF,MAAM,EACJ,cAAc,EACd,YAAY,EACZ,mBAAmB,EAAE,mBAAmB,EACxC,mBAAmB,EACnB,wBAAwB,EAAE,wBAAwB,GACnD,GAAG,aAAa,CAAC;QAClB,MAAM,aAAa,GAAG,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aACjD;YACD,OAAO;SACR;QAED,IAAI,aAAa,KAAK,YAAY,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACpE,OAAO;SACR;QAED,IAAI,aAAa,KAAK,mBAAmB,EAAE;YACzC,IAAI,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;gBAEvD,wBAAwB,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;aAC1D;iBAAM;gBACL,OAAO;aACR;SACF;QAGD,MAAM,eAAe,GAAG,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,YAAY,CAAC;QAE5D,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACzD,CAAC;CACF,CAAC"}
|
|
@@ -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 StrategyCallbacks_1 = __importDefault(require("../../../../enums/StrategyCallbacks"));
|
|
7
|
+
exports.default = {
|
|
8
|
+
[StrategyCallbacks_1.default.CreateIsInThreshold]: (operationData) => {
|
|
9
|
+
const { imageVoxelManager: imageVoxelManager, strategySpecificConfiguration, segmentIndex, } = operationData;
|
|
10
|
+
if (!strategySpecificConfiguration || !segmentIndex) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
return (index) => {
|
|
14
|
+
const { THRESHOLD, THRESHOLD_INSIDE_CIRCLE } = strategySpecificConfiguration;
|
|
15
|
+
const voxelValue = imageVoxelManager.getAtIndex(index);
|
|
16
|
+
const { threshold } = THRESHOLD || THRESHOLD_INSIDE_CIRCLE || {};
|
|
17
|
+
if (!(threshold === null || threshold === void 0 ? void 0 : threshold.length)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return threshold[0] <= voxelValue && voxelValue <= threshold[1];
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=threshold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threshold.js","sourceRoot":"","sources":["../../../../../../src/tools/segmentation/strategies/compositions/threshold.ts"],"names":[],"mappings":";;;;;AACA,4FAAoE;AAOpE,kBAAe;IACb,CAAC,2BAAiB,CAAC,mBAAmB,CAAC,EAAE,CACvC,aAAuC,EACvC,EAAE;QACF,MAAM,EACJ,iBAAiB,EAAE,iBAAiB,EACpC,6BAA6B,EAC7B,YAAY,GACb,GAAG,aAAa,CAAC;QAClB,IAAI,CAAC,6BAA6B,IAAI,CAAC,YAAY,EAAE;YACnD,OAAO;SACR;QACD,OAAO,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,GAC1C,6BAA6B,CAAC;YAEhC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAGvD,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,IAAI,uBAAuB,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EAAE;gBACtB,OAAO,IAAI,CAAC;aACb;YACD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
declare type OperationData = LabelmapToolOperationData & {
|
|
4
|
-
points: any;
|
|
5
|
-
};
|
|
6
|
-
export declare function eraseInsideCircle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
7
|
-
export {};
|
|
1
|
+
declare const eraseInsideCircle: (enabledElement: any, operationData: any) => unknown;
|
|
2
|
+
export { eraseInsideCircle };
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.eraseInsideCircle = void 0;
|
|
7
|
+
const BrushStrategy_1 = __importDefault(require("./BrushStrategy"));
|
|
4
8
|
const fillCircle_1 = require("./fillCircle");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
+
const compositions_1 = __importDefault(require("./compositions"));
|
|
10
|
+
const ERASE_CIRCLE_STRATEGY = new BrushStrategy_1.default('EraseCircle', compositions_1.default.erase, ...fillCircle_1.CIRCLE_STRATEGY.compositions);
|
|
11
|
+
const eraseInsideCircle = ERASE_CIRCLE_STRATEGY.strategyFunction;
|
|
9
12
|
exports.eraseInsideCircle = eraseInsideCircle;
|
|
10
13
|
//# sourceMappingURL=eraseCircle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eraseCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseCircle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eraseCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseCircle.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA4C;AAC5C,6CAA+C;AAC/C,kEAA0C;AAE1C,MAAM,qBAAqB,GAAG,IAAI,uBAAa,CAC7C,aAAa,EACb,sBAAY,CAAC,KAAK,EAClB,GAAG,4BAAe,CAAC,YAAY,CAChC,CAAC;AAEF,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;AAExD,8CAAiB"}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
declare type OperationData = LabelmapToolOperationData & {
|
|
4
|
-
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
5
|
-
};
|
|
6
|
-
export declare function eraseInsideSphere(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
7
|
-
export {};
|
|
1
|
+
declare const eraseInsideSphere: (enabledElement: any, operationData: any) => unknown;
|
|
2
|
+
export { eraseInsideSphere };
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.eraseInsideSphere = void 0;
|
|
7
|
+
const BrushStrategy_1 = __importDefault(require("./BrushStrategy"));
|
|
4
8
|
const fillSphere_1 = require("./fillSphere");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
});
|
|
9
|
-
(0, fillSphere_1.fillInsideSphere)(enabledElement, eraseOperationData);
|
|
10
|
-
}
|
|
9
|
+
const compositions_1 = __importDefault(require("./compositions"));
|
|
10
|
+
const ERASE_SPHERE_STRATEGY = new BrushStrategy_1.default('EraseSphere', compositions_1.default.erase, ...fillSphere_1.SPHERE_STRATEGY.compositions);
|
|
11
|
+
const eraseInsideSphere = ERASE_SPHERE_STRATEGY.strategyFunction;
|
|
11
12
|
exports.eraseInsideSphere = eraseInsideSphere;
|
|
12
13
|
//# sourceMappingURL=eraseSphere.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eraseSphere.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseSphere.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eraseSphere.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseSphere.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA4C;AAC5C,6CAA+C;AAC/C,kEAA0C;AAE1C,MAAM,qBAAqB,GAAG,IAAI,uBAAa,CAC7C,aAAa,EACb,sBAAY,CAAC,KAAK,EAClB,GAAG,4BAAe,CAAC,YAAY,CAChC,CAAC;AAEF,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;AAExD,8CAAiB"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
1
2
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
import
|
|
3
|
-
declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
import BrushStrategy from './BrushStrategy';
|
|
4
|
+
declare function createPointInEllipse(worldInfo: {
|
|
5
|
+
topLeftWorld: Types.Point3;
|
|
6
|
+
bottomRightWorld: Types.Point3;
|
|
7
|
+
center: Types.Point3 | vec3;
|
|
8
|
+
}): (pointLPS: Types.Point3) => boolean;
|
|
9
|
+
declare const CIRCLE_STRATEGY: BrushStrategy;
|
|
10
|
+
declare const CIRCLE_THRESHOLD_STRATEGY: BrushStrategy;
|
|
11
|
+
declare const fillInsideCircle: (enabledElement: any, operationData: any) => unknown;
|
|
12
|
+
declare const thresholdInsideCircle: (enabledElement: any, operationData: any) => unknown;
|
|
13
|
+
export declare function fillOutsideCircle(): void;
|
|
14
|
+
export { CIRCLE_STRATEGY, CIRCLE_THRESHOLD_STRATEGY, fillInsideCircle, thresholdInsideCircle, createPointInEllipse as createEllipseInPoint, };
|
|
@@ -3,106 +3,84 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.createEllipseInPoint = exports.thresholdInsideCircle = exports.fillInsideCircle = exports.CIRCLE_THRESHOLD_STRATEGY = exports.CIRCLE_STRATEGY = exports.fillOutsideCircle = void 0;
|
|
7
7
|
const gl_matrix_1 = require("gl-matrix");
|
|
8
8
|
const core_1 = require("@cornerstonejs/core");
|
|
9
|
-
const core_2 = require("@cornerstonejs/core");
|
|
10
9
|
const ellipse_1 = require("../../../utilities/math/ellipse");
|
|
10
|
+
const pointInSphere_1 = __importDefault(require("../../../utilities/math/sphere/pointInSphere"));
|
|
11
11
|
const boundingBox_1 = require("../../../utilities/boundingBox");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
12
|
+
const BrushStrategy_1 = __importDefault(require("./BrushStrategy"));
|
|
13
|
+
const enums_1 = require("../../../enums");
|
|
14
|
+
const compositions_1 = __importDefault(require("./compositions"));
|
|
15
|
+
const { transformWorldToIndex } = core_1.utilities;
|
|
16
|
+
const EPSILON = 1e-4;
|
|
17
|
+
const nearOrZero = (testValue, nearValue) => Math.abs(testValue) < EPSILON || Math.abs(testValue - nearValue) < EPSILON;
|
|
18
|
+
const initializeCircle = {
|
|
19
|
+
[enums_1.StrategyCallbacks.Initialize]: (operationData) => {
|
|
20
|
+
const { points, imageVoxelManager: imageVoxelManager, viewport, segmentationImageData, segmentationVoxelManager: segmentationVoxelManager, } = operationData;
|
|
21
|
+
if (!points) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const center = gl_matrix_1.vec3.fromValues(0, 0, 0);
|
|
25
|
+
points.forEach((point) => {
|
|
26
|
+
gl_matrix_1.vec3.add(center, center, point);
|
|
27
|
+
});
|
|
28
|
+
gl_matrix_1.vec3.scale(center, center, 1 / points.length);
|
|
29
|
+
operationData.centerWorld = center;
|
|
30
|
+
operationData.centerIJK = transformWorldToIndex(segmentationImageData, center);
|
|
31
|
+
const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
|
|
32
|
+
const [topLeftCanvas, bottomRightCanvas] = (0, ellipse_1.getCanvasEllipseCorners)(canvasCoordinates);
|
|
33
|
+
const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
|
|
34
|
+
const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
|
|
35
|
+
const ellipsoidCornersIJK = [
|
|
36
|
+
transformWorldToIndex(segmentationImageData, topLeftWorld),
|
|
37
|
+
(transformWorldToIndex(segmentationImageData, bottomRightWorld)),
|
|
38
|
+
];
|
|
39
|
+
segmentationVoxelManager.boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(ellipsoidCornersIJK, segmentationVoxelManager.dimensions);
|
|
40
|
+
imageVoxelManager.isInObject = createPointInEllipse({
|
|
41
|
+
topLeftWorld,
|
|
42
|
+
bottomRightWorld,
|
|
43
|
+
center,
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
function createPointInEllipse(worldInfo) {
|
|
48
|
+
const { topLeftWorld, bottomRightWorld, center } = worldInfo;
|
|
49
|
+
const xRadius = Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2;
|
|
50
|
+
const yRadius = Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2;
|
|
51
|
+
const zRadius = Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2;
|
|
52
|
+
const radius = Math.max(xRadius, yRadius, zRadius);
|
|
53
|
+
if (nearOrZero(xRadius, radius) &&
|
|
54
|
+
nearOrZero(yRadius, radius) &&
|
|
55
|
+
nearOrZero(zRadius, radius)) {
|
|
56
|
+
const sphereObj = {
|
|
57
|
+
center,
|
|
58
|
+
radius,
|
|
59
|
+
radius2: radius * radius,
|
|
48
60
|
};
|
|
61
|
+
return (pointLPS) => (0, pointInSphere_1.default)(sphereObj, pointLPS);
|
|
49
62
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
const ellipseObj = {
|
|
64
|
+
center: center,
|
|
65
|
+
xRadius,
|
|
66
|
+
yRadius,
|
|
67
|
+
zRadius,
|
|
68
|
+
};
|
|
69
|
+
const inverts = (0, ellipse_1.precalculatePointInEllipse)(ellipseObj);
|
|
70
|
+
const { precalculated } = inverts;
|
|
71
|
+
return precalculated;
|
|
58
72
|
}
|
|
73
|
+
exports.createEllipseInPoint = createPointInEllipse;
|
|
74
|
+
const CIRCLE_STRATEGY = new BrushStrategy_1.default('Circle', compositions_1.default.regionFill, compositions_1.default.setValue, initializeCircle, compositions_1.default.determineSegmentIndex, compositions_1.default.preview);
|
|
75
|
+
exports.CIRCLE_STRATEGY = CIRCLE_STRATEGY;
|
|
76
|
+
const CIRCLE_THRESHOLD_STRATEGY = new BrushStrategy_1.default('CircleThreshold', compositions_1.default.regionFill, compositions_1.default.setValue, initializeCircle, compositions_1.default.determineSegmentIndex, compositions_1.default.dynamicThreshold, compositions_1.default.threshold, compositions_1.default.preview, compositions_1.default.islandRemoval);
|
|
77
|
+
exports.CIRCLE_THRESHOLD_STRATEGY = CIRCLE_THRESHOLD_STRATEGY;
|
|
78
|
+
const fillInsideCircle = CIRCLE_STRATEGY.strategyFunction;
|
|
59
79
|
exports.fillInsideCircle = fillInsideCircle;
|
|
60
|
-
|
|
61
|
-
if ((0, stackVolumeCheck_1.isVolumeSegmentation)(operationData)) {
|
|
62
|
-
const { referencedVolumeId, volumeId } = operationData;
|
|
63
|
-
const imageVolume = core_1.cache.getVolume(referencedVolumeId);
|
|
64
|
-
const segmentation = core_1.cache.getVolume(volumeId);
|
|
65
|
-
if (!core_2.utilities.isEqual(segmentation.dimensions, imageVolume.dimensions) ||
|
|
66
|
-
!core_2.utilities.isEqual(segmentation.direction, imageVolume.direction)) {
|
|
67
|
-
throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
fillCircle(enabledElement, operationData, true);
|
|
71
|
-
}
|
|
80
|
+
const thresholdInsideCircle = CIRCLE_THRESHOLD_STRATEGY.strategyFunction;
|
|
72
81
|
exports.thresholdInsideCircle = thresholdInsideCircle;
|
|
73
|
-
function fillOutsideCircle(
|
|
82
|
+
function fillOutsideCircle() {
|
|
74
83
|
throw new Error('Not yet implemented');
|
|
75
84
|
}
|
|
76
85
|
exports.fillOutsideCircle = fillOutsideCircle;
|
|
77
|
-
function getCenter(points) {
|
|
78
|
-
const center = gl_matrix_1.vec3.fromValues(0, 0, 0);
|
|
79
|
-
points.forEach((point) => {
|
|
80
|
-
gl_matrix_1.vec3.add(center, center, point);
|
|
81
|
-
});
|
|
82
|
-
gl_matrix_1.vec3.scale(center, center, 1 / points.length);
|
|
83
|
-
return center;
|
|
84
|
-
}
|
|
85
|
-
function getEllipse(viewport, imageData, points) {
|
|
86
|
-
const center = getCenter(points);
|
|
87
|
-
const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
|
|
88
|
-
const dimensions = imageData.getDimensions();
|
|
89
|
-
const [topLeftCanvas, bottomRightCanvas] = (0, ellipse_1.getCanvasEllipseCorners)(canvasCoordinates);
|
|
90
|
-
const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
|
|
91
|
-
const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
|
|
92
|
-
const ellipsoidCornersIJK = [
|
|
93
|
-
transformWorldToIndex(imageData, topLeftWorld),
|
|
94
|
-
transformWorldToIndex(imageData, bottomRightWorld),
|
|
95
|
-
];
|
|
96
|
-
const boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(ellipsoidCornersIJK, dimensions);
|
|
97
|
-
if (boundsIJK.every(([min, max]) => min !== max)) {
|
|
98
|
-
throw new Error('Oblique segmentation tools are not supported yet');
|
|
99
|
-
}
|
|
100
|
-
const ellipseObj = {
|
|
101
|
-
center: center,
|
|
102
|
-
xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
|
|
103
|
-
yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
|
|
104
|
-
zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
|
|
105
|
-
};
|
|
106
|
-
return { ellipseObj, boundsIJK };
|
|
107
|
-
}
|
|
108
86
|
//# sourceMappingURL=fillCircle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fillCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillCircle.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAiC;
|
|
1
|
+
{"version":3,"file":"fillCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillCircle.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ const triggerSegmentationEvents_1 = require("../../../stateManagement/segmentati
|
|
|
8
8
|
const getStrategyData_1 = require("./utils/getStrategyData");
|
|
9
9
|
const { transformWorldToIndex } = core_1.utilities;
|
|
10
10
|
function fillRectangle(enabledElement, operationData, inside = true) {
|
|
11
|
-
const { points, segmentsLocked, segmentIndex, segmentationId
|
|
11
|
+
const { points, segmentsLocked, segmentIndex, segmentationId } = operationData;
|
|
12
12
|
const strategyData = (0, getStrategyData_1.getStrategyData)({
|
|
13
13
|
operationData,
|
|
14
14
|
viewport: enabledElement.viewport,
|
|
@@ -28,17 +28,11 @@ function fillRectangle(enabledElement, operationData, inside = true) {
|
|
|
28
28
|
});
|
|
29
29
|
const boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(rectangleCornersIJK, segmentationImageData.getDimensions());
|
|
30
30
|
const pointInRectangle = () => true;
|
|
31
|
-
const callback = ({ value, index
|
|
31
|
+
const callback = ({ value, index }) => {
|
|
32
32
|
if (segmentsLocked.includes(value)) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
segmentationScalarData[index] = segmentIndex;
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (constraintFn(pointIJK)) {
|
|
40
|
-
segmentationScalarData[index] = segmentIndex;
|
|
41
|
-
}
|
|
35
|
+
segmentationScalarData[index] = segmentIndex;
|
|
42
36
|
};
|
|
43
37
|
(0, utilities_1.pointInShapeCallback)(segmentationImageData, pointInRectangle, callback, boundsIJK);
|
|
44
38
|
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(segmentationId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fillRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillRectangle.ts"],"names":[],"mappings":";;;AAAA,8CAA2D;AAG3D,gEAA2E;AAC3E,kDAA0D;AAC1D,+GAAkH;AAElH,6DAA0D;AAE1D,MAAM,EAAE,qBAAqB,EAAE,GAAG,gBAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"fillRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillRectangle.ts"],"names":[],"mappings":";;;AAAA,8CAA2D;AAG3D,gEAA2E;AAC3E,kDAA0D;AAC1D,+GAAkH;AAElH,6DAA0D;AAE1D,MAAM,EAAE,qBAAqB,EAAE,GAAG,gBAAO,CAAC;AAc1C,SAAS,aAAa,CACpB,cAAqC,EACrC,aAA4B,EAC5B,MAAM,GAAG,IAAI;IAEb,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,GAC5D,aAAa,CAAC;IAEhB,MAAM,YAAY,GAAG,IAAA,iCAAe,EAAC;QACnC,aAAa;QACb,QAAQ,EAAE,cAAc,CAAC,QAAQ;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,OAAO;KACR;IAED,MAAM,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,YAAY,CAAC;IAEvE,IAAI,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,OAAO,qBAAqB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAGH,mBAAmB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAA,uCAAyB,EACzC,mBAAmB,EACnB,qBAAqB,CAAC,aAAa,EAAE,CACtC,CAAC;IAGF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IAEpC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,sBAAsB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;IAC/C,CAAC,CAAC;IAEF,IAAA,gCAAoB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,SAAS,CACV,CAAC;IAEF,IAAA,2DAA+B,EAAC,cAAc,CAAC,CAAC;AAClD,CAAC;AAQD,SAAgB,mBAAmB,CACjC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AALD,kDAKC;AAQD,SAAgB,oBAAoB,CAClC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AALD,oDAKC"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
export declare function thresholdInsideSphere(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
8
|
-
export declare function fillOutsideSphere(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
9
|
-
export {};
|
|
1
|
+
import BrushStrategy from './BrushStrategy';
|
|
2
|
+
declare const SPHERE_STRATEGY: BrushStrategy;
|
|
3
|
+
declare const fillInsideSphere: (enabledElement: any, operationData: any) => unknown;
|
|
4
|
+
declare const thresholdInsideSphere: (enabledElement: any, operationData: any) => unknown;
|
|
5
|
+
export declare function fillOutsideSphere(): void;
|
|
6
|
+
export { fillInsideSphere, thresholdInsideSphere, SPHERE_STRATEGY };
|