@cornerstonejs/tools 1.32.3 → 1.34.0
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/eventListeners/index.d.ts +2 -2
- package/dist/cjs/eventListeners/index.js +2 -1
- package/dist/cjs/eventListeners/index.js.map +1 -1
- package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.d.ts +5 -0
- package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.js +143 -0
- package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.js.map +1 -0
- package/dist/cjs/eventListeners/segmentation/index.d.ts +2 -1
- package/dist/cjs/eventListeners/segmentation/index.js +3 -1
- package/dist/cjs/eventListeners/segmentation/index.js.map +1 -1
- package/dist/cjs/eventListeners/segmentation/segmentationDataModifiedEventListener.js +31 -5
- package/dist/cjs/eventListeners/segmentation/segmentationDataModifiedEventListener.js.map +1 -1
- package/dist/cjs/store/SynchronizerManager/Synchronizer.d.ts +1 -0
- package/dist/cjs/store/SynchronizerManager/Synchronizer.js +17 -1
- package/dist/cjs/store/SynchronizerManager/Synchronizer.js.map +1 -1
- package/dist/cjs/store/addEnabledElement.js +1 -0
- package/dist/cjs/store/addEnabledElement.js.map +1 -1
- package/dist/cjs/store/removeEnabledElement.js +2 -0
- package/dist/cjs/store/removeEnabledElement.js.map +1 -1
- package/dist/cjs/synchronizers/callbacks/areViewportsCoplanar .d.ts +1 -1
- package/dist/cjs/synchronizers/callbacks/areViewportsCoplanar .js.map +1 -1
- package/dist/cjs/synchronizers/callbacks/{stackImageSyncCallback.d.ts → imageSliceSyncCallback.d.ts} +1 -1
- package/dist/cjs/synchronizers/callbacks/{stackImageSyncCallback.js → imageSliceSyncCallback.js} +8 -4
- package/dist/cjs/synchronizers/callbacks/{stackImageSyncCallback.js.map → imageSliceSyncCallback.js.map} +1 -1
- package/dist/cjs/synchronizers/index.d.ts +3 -2
- package/dist/cjs/synchronizers/index.js +5 -3
- package/dist/cjs/synchronizers/index.js.map +1 -1
- package/dist/cjs/synchronizers/synchronizers/{createStackImageSynchronizer.d.ts → createImageSliceSynchronizer.d.ts} +1 -1
- package/dist/cjs/synchronizers/synchronizers/createImageSliceSynchronizer.js +17 -0
- package/dist/cjs/synchronizers/synchronizers/createImageSliceSynchronizer.js.map +1 -0
- package/dist/cjs/synchronizers/synchronizers/index.d.ts +3 -2
- package/dist/cjs/synchronizers/synchronizers/index.js +5 -3
- package/dist/cjs/synchronizers/synchronizers/index.js.map +1 -1
- package/dist/cjs/tools/annotation/CircleROITool.js +3 -1
- package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.js +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -1
- package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.js +23 -10
- package/dist/cjs/tools/displayTools/Labelmap/addLabelmapToElement.js.map +1 -1
- package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
- package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +36 -22
- package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
- package/dist/cjs/tools/displayTools/Labelmap/validateRepresentationData.js +6 -5
- package/dist/cjs/tools/displayTools/Labelmap/validateRepresentationData.js.map +1 -1
- package/dist/cjs/tools/segmentation/BrushTool.js +40 -45
- package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/CircleScissorsTool.d.ts +4 -2
- package/dist/cjs/tools/segmentation/CircleScissorsTool.js +18 -17
- package/dist/cjs/tools/segmentation/CircleScissorsTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/PaintFillTool.js +28 -5
- package/dist/cjs/tools/segmentation/PaintFillTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/RectangleScissorsTool.d.ts +3 -1
- package/dist/cjs/tools/segmentation/RectangleScissorsTool.js +15 -16
- package/dist/cjs/tools/segmentation/RectangleScissorsTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/SphereScissorsTool.d.ts +4 -2
- package/dist/cjs/tools/segmentation/SphereScissorsTool.js +20 -20
- package/dist/cjs/tools/segmentation/SphereScissorsTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/eraseCircle.d.ts +2 -10
- package/dist/cjs/tools/segmentation/strategies/eraseCircle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/eraseRectangle.d.ts +4 -8
- package/dist/cjs/tools/segmentation/strategies/eraseRectangle.js +4 -20
- package/dist/cjs/tools/segmentation/strategies/eraseRectangle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -10
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillCircle.d.ts +3 -11
- package/dist/cjs/tools/segmentation/strategies/fillCircle.js +57 -32
- package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillRectangle.d.ts +2 -7
- package/dist/cjs/tools/segmentation/strategies/fillRectangle.js +16 -8
- package/dist/cjs/tools/segmentation/strategies/fillRectangle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +2 -10
- package/dist/cjs/tools/segmentation/strategies/fillSphere.js +31 -17
- package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.d.ts +9 -0
- package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js +43 -0
- package/dist/cjs/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -0
- 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/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +5 -0
- package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.js +13 -0
- package/dist/cjs/tools/segmentation/strategies/utils/stackVolumeCheck.js.map +1 -0
- package/dist/cjs/types/LabelmapToolOperationData.d.ts +14 -0
- package/dist/cjs/types/LabelmapToolOperationData.js +3 -0
- package/dist/cjs/types/LabelmapToolOperationData.js.map +1 -0
- package/dist/cjs/types/LabelmapTypes.d.ts +5 -1
- package/dist/cjs/types/index.d.ts +2 -1
- package/dist/cjs/utilities/math/ellipse/pointInEllipse.d.ts +7 -9
- package/dist/cjs/utilities/math/ellipse/pointInEllipse.js +19 -11
- package/dist/cjs/utilities/math/ellipse/pointInEllipse.js.map +1 -1
- package/dist/esm/eventListeners/index.js +2 -2
- package/dist/esm/eventListeners/index.js.map +1 -1
- package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +115 -0
- package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js.map +1 -0
- package/dist/esm/eventListeners/segmentation/index.js +2 -1
- package/dist/esm/eventListeners/segmentation/index.js.map +1 -1
- package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +32 -6
- package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js.map +1 -1
- package/dist/esm/store/SynchronizerManager/Synchronizer.js +17 -1
- package/dist/esm/store/SynchronizerManager/Synchronizer.js.map +1 -1
- package/dist/esm/store/addEnabledElement.js +2 -1
- package/dist/esm/store/addEnabledElement.js.map +1 -1
- package/dist/esm/store/removeEnabledElement.js +2 -0
- package/dist/esm/store/removeEnabledElement.js.map +1 -1
- package/dist/esm/synchronizers/callbacks/areViewportsCoplanar .js.map +1 -1
- package/dist/esm/synchronizers/callbacks/{stackImageSyncCallback.js → imageSliceSyncCallback.js} +8 -4
- package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.js.map +1 -0
- package/dist/esm/synchronizers/index.js +3 -2
- package/dist/esm/synchronizers/index.js.map +1 -1
- package/dist/esm/synchronizers/synchronizers/createImageSliceSynchronizer.js +11 -0
- package/dist/esm/synchronizers/synchronizers/createImageSliceSynchronizer.js.map +1 -0
- package/dist/esm/synchronizers/synchronizers/index.js +3 -2
- package/dist/esm/synchronizers/synchronizers/index.js.map +1 -1
- package/dist/esm/tools/annotation/CircleROITool.js +4 -2
- package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +24 -11
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js.map +1 -1
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +36 -22
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
- package/dist/esm/tools/displayTools/Labelmap/validateRepresentationData.js +6 -5
- package/dist/esm/tools/displayTools/Labelmap/validateRepresentationData.js.map +1 -1
- package/dist/esm/tools/segmentation/BrushTool.js +38 -29
- package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
- package/dist/esm/tools/segmentation/CircleScissorsTool.js +27 -15
- package/dist/esm/tools/segmentation/CircleScissorsTool.js.map +1 -1
- package/dist/esm/tools/segmentation/PaintFillTool.js +28 -5
- package/dist/esm/tools/segmentation/PaintFillTool.js.map +1 -1
- package/dist/esm/tools/segmentation/RectangleScissorsTool.js +26 -17
- package/dist/esm/tools/segmentation/RectangleScissorsTool.js.map +1 -1
- package/dist/esm/tools/segmentation/SphereScissorsTool.js +28 -17
- package/dist/esm/tools/segmentation/SphereScissorsTool.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/eraseCircle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/eraseRectangle.js +4 -20
- package/dist/esm/tools/segmentation/strategies/eraseRectangle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillCircle.js +56 -31
- package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillRectangle.js +16 -8
- package/dist/esm/tools/segmentation/strategies/fillRectangle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillSphere.js +32 -18
- package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +40 -0
- package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js.map +1 -0
- 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/tools/segmentation/strategies/utils/stackVolumeCheck.js +9 -0
- package/dist/esm/tools/segmentation/strategies/utils/stackVolumeCheck.js.map +1 -0
- package/dist/esm/types/LabelmapToolOperationData.js +2 -0
- package/dist/esm/types/LabelmapToolOperationData.js.map +1 -0
- package/dist/esm/utilities/math/ellipse/pointInEllipse.js +19 -11
- package/dist/esm/utilities/math/ellipse/pointInEllipse.js.map +1 -1
- package/dist/types/eventListeners/index.d.ts +2 -2
- package/dist/types/eventListeners/index.d.ts.map +1 -1
- package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts +6 -0
- package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts.map +1 -0
- package/dist/types/eventListeners/segmentation/index.d.ts +2 -1
- package/dist/types/eventListeners/segmentation/index.d.ts.map +1 -1
- package/dist/types/eventListeners/segmentation/segmentationDataModifiedEventListener.d.ts.map +1 -1
- package/dist/types/store/SynchronizerManager/Synchronizer.d.ts +1 -0
- package/dist/types/store/SynchronizerManager/Synchronizer.d.ts.map +1 -1
- package/dist/types/store/addEnabledElement.d.ts.map +1 -1
- package/dist/types/store/removeEnabledElement.d.ts.map +1 -1
- package/dist/types/synchronizers/callbacks/areViewportsCoplanar .d.ts +1 -1
- package/dist/types/synchronizers/callbacks/areViewportsCoplanar .d.ts.map +1 -1
- package/dist/types/synchronizers/callbacks/{stackImageSyncCallback.d.ts → imageSliceSyncCallback.d.ts} +2 -2
- package/dist/types/synchronizers/callbacks/imageSliceSyncCallback.d.ts.map +1 -0
- package/dist/types/synchronizers/index.d.ts +3 -2
- package/dist/types/synchronizers/index.d.ts.map +1 -1
- package/dist/types/synchronizers/synchronizers/createImageSliceSynchronizer.d.ts +3 -0
- package/dist/types/synchronizers/synchronizers/createImageSliceSynchronizer.d.ts.map +1 -0
- package/dist/types/synchronizers/synchronizers/index.d.ts +3 -2
- package/dist/types/synchronizers/synchronizers/index.d.ts.map +1 -1
- package/dist/types/tools/annotation/CircleROITool.d.ts.map +1 -1
- package/dist/types/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -1
- package/dist/types/tools/displayTools/Labelmap/addLabelmapToElement.d.ts.map +1 -1
- package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -1
- package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts.map +1 -1
- package/dist/types/tools/displayTools/Labelmap/validateRepresentationData.d.ts.map +1 -1
- package/dist/types/tools/segmentation/BrushTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/CircleScissorsTool.d.ts +4 -2
- package/dist/types/tools/segmentation/CircleScissorsTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/PaintFillTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts +3 -1
- package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/SphereScissorsTool.d.ts +4 -2
- package/dist/types/tools/segmentation/SphereScissorsTool.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts +2 -10
- package/dist/types/tools/segmentation/strategies/eraseCircle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/eraseRectangle.d.ts +4 -8
- package/dist/types/tools/segmentation/strategies/eraseRectangle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts +2 -10
- package/dist/types/tools/segmentation/strategies/eraseSphere.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/fillCircle.d.ts +3 -11
- package/dist/types/tools/segmentation/strategies/fillCircle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts +2 -7
- package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/fillSphere.d.ts +2 -10
- package/dist/types/tools/segmentation/strategies/fillSphere.d.ts.map +1 -1
- package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts +10 -0
- package/dist/types/tools/segmentation/strategies/utils/getStrategyData.d.ts.map +1 -0
- 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/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts +6 -0
- package/dist/types/tools/segmentation/strategies/utils/stackVolumeCheck.d.ts.map +1 -0
- package/dist/types/types/LabelmapToolOperationData.d.ts +15 -0
- package/dist/types/types/LabelmapToolOperationData.d.ts.map +1 -0
- package/dist/types/types/LabelmapTypes.d.ts +5 -1
- package/dist/types/types/LabelmapTypes.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/pointInEllipse.d.ts +7 -9
- package/dist/types/utilities/math/ellipse/pointInEllipse.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/eventListeners/index.ts +2 -0
- package/src/eventListeners/segmentation/imageChangeEventListener.ts +215 -0
- package/src/eventListeners/segmentation/index.ts +2 -0
- package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +70 -9
- package/src/store/SynchronizerManager/Synchronizer.ts +28 -3
- package/src/store/addEnabledElement.ts +2 -0
- package/src/store/removeEnabledElement.ts +3 -0
- package/src/synchronizers/callbacks/areViewportsCoplanar .ts +2 -2
- package/src/synchronizers/callbacks/{stackImageSyncCallback.ts → imageSliceSyncCallback.ts} +16 -8
- package/src/synchronizers/index.ts +5 -1
- package/src/synchronizers/synchronizers/{createStackImageSynchronizer.ts → createImageSliceSynchronizer.ts} +8 -5
- package/src/synchronizers/synchronizers/index.ts +4 -1
- package/src/tools/annotation/CircleROITool.ts +5 -5
- package/src/tools/annotation/EllipticalROITool.ts +1 -1
- package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +51 -22
- package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +65 -35
- package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +17 -11
- package/src/tools/segmentation/BrushTool.ts +78 -39
- package/src/tools/segmentation/CircleScissorsTool.ts +46 -29
- package/src/tools/segmentation/PaintFillTool.ts +45 -8
- package/src/tools/segmentation/RectangleScissorsTool.ts +41 -31
- package/src/tools/segmentation/SphereScissorsTool.ts +46 -28
- package/src/tools/segmentation/strategies/eraseCircle.ts +3 -11
- package/src/tools/segmentation/strategies/eraseRectangle.ts +13 -42
- package/src/tools/segmentation/strategies/eraseSphere.ts +2 -10
- package/src/tools/segmentation/strategies/fillCircle.ts +93 -61
- package/src/tools/segmentation/strategies/fillRectangle.ts +31 -22
- package/src/tools/segmentation/strategies/fillSphere.ts +51 -41
- package/src/tools/segmentation/strategies/utils/getStrategyData.ts +58 -0
- package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +3 -2
- package/src/tools/segmentation/strategies/utils/stackVolumeCheck.ts +33 -0
- package/src/types/LabelmapToolOperationData.ts +27 -0
- package/src/types/LabelmapTypes.ts +16 -1
- package/src/types/index.ts +8 -0
- package/src/utilities/math/ellipse/pointInEllipse.ts +43 -22
- package/dist/cjs/synchronizers/synchronizers/createStackImageSynchronizer.js +0 -15
- package/dist/cjs/synchronizers/synchronizers/createStackImageSynchronizer.js.map +0 -1
- package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +0 -1
- package/dist/esm/synchronizers/synchronizers/createStackImageSynchronizer.js +0 -9
- package/dist/esm/synchronizers/synchronizers/createStackImageSynchronizer.js.map +0 -1
- package/dist/types/synchronizers/callbacks/stackImageSyncCallback.d.ts.map +0 -1
- package/dist/types/synchronizers/synchronizers/createStackImageSynchronizer.d.ts +0 -3
- package/dist/types/synchronizers/synchronizers/createStackImageSynchronizer.d.ts.map +0 -1
|
@@ -12,6 +12,7 @@ const elementCursor_1 = require("../../cursors/elementCursor");
|
|
|
12
12
|
const triggerAnnotationRenderForViewportIds_1 = __importDefault(require("../../utilities/triggerAnnotationRenderForViewportIds"));
|
|
13
13
|
const segmentation_1 = require("../../stateManagement/segmentation");
|
|
14
14
|
const segmentationState_1 = require("../../stateManagement/segmentation/segmentationState");
|
|
15
|
+
const stackVolumeCheck_1 = require("./strategies/utils/stackVolumeCheck");
|
|
15
16
|
class SphereScissorsTool extends base_1.BaseTool {
|
|
16
17
|
constructor(toolProps = {}, defaultToolProps = {
|
|
17
18
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
@@ -39,13 +40,10 @@ class SphereScissorsTool extends base_1.BaseTool {
|
|
|
39
40
|
if (!activeSegmentationRepresentation) {
|
|
40
41
|
throw new Error('No active segmentation detected, create one before using scissors tool');
|
|
41
42
|
}
|
|
42
|
-
const { segmentationRepresentationUID, segmentationId
|
|
43
|
+
const { segmentationRepresentationUID, segmentationId } = activeSegmentationRepresentation;
|
|
43
44
|
const segmentIndex = segmentation_1.segmentIndex.getActiveSegmentIndex(segmentationId);
|
|
44
45
|
const segmentsLocked = segmentation_1.segmentLocking.getLockedSegments(segmentationId);
|
|
45
46
|
const segmentColor = segmentation_1.config.color.getColorForSegmentIndex(toolGroupId, segmentationRepresentationUID, segmentIndex);
|
|
46
|
-
const { representationData } = (0, segmentationState_1.getSegmentation)(segmentationId);
|
|
47
|
-
const { volumeId } = representationData[type];
|
|
48
|
-
const segmentation = core_1.cache.getVolume(volumeId);
|
|
49
47
|
this.isDrawing = true;
|
|
50
48
|
const annotation = {
|
|
51
49
|
metadata: {
|
|
@@ -69,12 +67,11 @@ class SphereScissorsTool extends base_1.BaseTool {
|
|
|
69
67
|
const viewportIdsToRender = [viewport.id];
|
|
70
68
|
this.editData = {
|
|
71
69
|
annotation,
|
|
72
|
-
segmentation,
|
|
73
70
|
centerCanvas: canvasPos,
|
|
71
|
+
segmentationRepresentationUID,
|
|
74
72
|
segmentIndex,
|
|
75
73
|
segmentsLocked,
|
|
76
74
|
segmentColor,
|
|
77
|
-
segmentationId,
|
|
78
75
|
toolGroupId,
|
|
79
76
|
viewportIdsToRender,
|
|
80
77
|
handleIndex: 3,
|
|
@@ -82,6 +79,17 @@ class SphereScissorsTool extends base_1.BaseTool {
|
|
|
82
79
|
newAnnotation: true,
|
|
83
80
|
hasMoved: false,
|
|
84
81
|
};
|
|
82
|
+
const { representationData } = (0, segmentationState_1.getSegmentation)(segmentationId);
|
|
83
|
+
const labelmapData = representationData[enums_1.SegmentationRepresentations.Labelmap];
|
|
84
|
+
if ((0, stackVolumeCheck_1.isVolumeSegmentation)(labelmapData)) {
|
|
85
|
+
const { volumeId } = labelmapData;
|
|
86
|
+
const segmentation = core_1.cache.getVolume(volumeId);
|
|
87
|
+
this.editData = Object.assign(Object.assign({}, this.editData), { volumeId, referencedVolumeId: segmentation.referencedVolumeId });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const { imageIdReferenceMap } = labelmapData;
|
|
91
|
+
this.editData = Object.assign(Object.assign({}, this.editData), { imageIdReferenceMap });
|
|
92
|
+
}
|
|
85
93
|
this._activateDraw(element);
|
|
86
94
|
(0, elementCursor_1.hideElementCursor)(element);
|
|
87
95
|
evt.preventDefault();
|
|
@@ -128,7 +136,7 @@ class SphereScissorsTool extends base_1.BaseTool {
|
|
|
128
136
|
this._endCallback = (evt) => {
|
|
129
137
|
const eventDetail = evt.detail;
|
|
130
138
|
const { element } = eventDetail;
|
|
131
|
-
const { annotation, newAnnotation, hasMoved,
|
|
139
|
+
const { annotation, newAnnotation, hasMoved, segmentIndex, segmentationRepresentationUID, segmentsLocked, } = this.editData;
|
|
132
140
|
const { data } = annotation;
|
|
133
141
|
const { viewPlaneNormal, viewUp } = annotation.metadata;
|
|
134
142
|
if (newAnnotation && !hasMoved) {
|
|
@@ -139,21 +147,13 @@ class SphereScissorsTool extends base_1.BaseTool {
|
|
|
139
147
|
this._deactivateDraw(element);
|
|
140
148
|
(0, elementCursor_1.resetElementCursor)(element);
|
|
141
149
|
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
this.isDrawing = false;
|
|
145
|
-
if (viewport instanceof core_1.StackViewport) {
|
|
146
|
-
throw new Error('Not implemented yet');
|
|
147
|
-
}
|
|
148
|
-
const operationData = {
|
|
149
|
-
points: data.handles.points,
|
|
150
|
-
volume: segmentation,
|
|
151
|
-
segmentIndex,
|
|
150
|
+
const operationData = Object.assign(Object.assign({}, this.editData), { points: data.handles.points, segmentIndex,
|
|
151
|
+
segmentationRepresentationUID,
|
|
152
152
|
segmentsLocked,
|
|
153
|
-
segmentationId,
|
|
154
153
|
viewPlaneNormal,
|
|
155
|
-
viewUp
|
|
156
|
-
|
|
154
|
+
viewUp });
|
|
155
|
+
this.editData = null;
|
|
156
|
+
this.isDrawing = false;
|
|
157
157
|
this.applyActiveStrategy(enabledElement, operationData);
|
|
158
158
|
};
|
|
159
159
|
this._activateDraw = (element) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SphereScissorsTool.js","sourceRoot":"","sources":["../../../../src/tools/segmentation/SphereScissorsTool.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"SphereScissorsTool.js","sourceRoot":"","sources":["../../../../src/tools/segmentation/SphereScissorsTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
imageVolume: Types.IImageVolume;
|
|
2
|
+
import { LabelmapToolOperationData } from '../../../types';
|
|
3
|
+
declare type OperationData = LabelmapToolOperationData & {
|
|
5
4
|
points: any;
|
|
6
|
-
volume: Types.IImageVolume;
|
|
7
|
-
segmentIndex: number;
|
|
8
|
-
segmentsLocked: number[];
|
|
9
|
-
viewPlaneNormal: number[];
|
|
10
|
-
viewUp: number[];
|
|
11
|
-
strategySpecificConfiguration: any;
|
|
12
|
-
constraintFn: () => boolean;
|
|
13
5
|
};
|
|
14
6
|
export declare function eraseInsideCircle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
15
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eraseCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseCircle.ts"],"names":[],"mappings":";;;AAEA,6CAAgD;
|
|
1
|
+
{"version":3,"file":"eraseCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseCircle.ts"],"names":[],"mappings":";;;AAEA,6CAAgD;AAOhD,SAAgB,iBAAiB,CAC/B,cAAqC,EACrC,aAA4B;IAI5B,MAAM,kBAAkB,mCACnB,aAAa,KAChB,YAAY,EAAE,CAAC,GAChB,CAAC;IAEF,IAAA,6BAAgB,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AACvD,CAAC;AAZD,8CAYC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import { ImageVolume } from '@cornerstonejs/core';
|
|
2
1
|
import type { Types } from '@cornerstonejs/core';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { LabelmapToolOperationData } from '../../../types';
|
|
3
|
+
declare type OperationData = LabelmapToolOperationData & {
|
|
5
4
|
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
6
|
-
volume: ImageVolume;
|
|
7
|
-
constraintFn: (x: [number, number, number]) => boolean;
|
|
8
|
-
segmentsLocked: number[];
|
|
9
5
|
};
|
|
10
|
-
export declare function eraseInsideRectangle(enabledElement: Types.IEnabledElement, operationData:
|
|
11
|
-
export declare function eraseOutsideRectangle(enabledElement: Types.IEnabledElement, operationData:
|
|
6
|
+
export declare function eraseInsideRectangle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
7
|
+
export declare function eraseOutsideRectangle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
12
8
|
export {};
|
|
@@ -1,28 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.eraseOutsideRectangle = exports.eraseInsideRectangle = void 0;
|
|
4
|
-
const
|
|
5
|
-
const boundingBox_1 = require("../../../utilities/boundingBox");
|
|
6
|
-
const triggerSegmentationEvents_1 = require("../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
7
|
-
const utilities_1 = require("../../../utilities");
|
|
8
|
-
const { transformWorldToIndex } = core_1.utilities;
|
|
4
|
+
const fillRectangle_1 = require("./fillRectangle");
|
|
9
5
|
function eraseRectangle(enabledElement, operationData, inside = true) {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const scalarData = segmentation.getScalarData();
|
|
13
|
-
const rectangleCornersIJK = points.map((world) => {
|
|
14
|
-
return transformWorldToIndex(imageData, world);
|
|
6
|
+
const eraseOperationData = Object.assign({}, operationData, {
|
|
7
|
+
segmentIndex: 0,
|
|
15
8
|
});
|
|
16
|
-
|
|
17
|
-
const pointInShape = () => true;
|
|
18
|
-
const callback = ({ value, index }) => {
|
|
19
|
-
if (segmentsLocked.includes(value)) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
scalarData[index] = 0;
|
|
23
|
-
};
|
|
24
|
-
(0, utilities_1.pointInShapeCallback)(imageData, pointInShape, callback, boundsIJK);
|
|
25
|
-
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(segmentationId);
|
|
9
|
+
(0, fillRectangle_1.fillInsideRectangle)(enabledElement, eraseOperationData);
|
|
26
10
|
}
|
|
27
11
|
function eraseInsideRectangle(enabledElement, operationData) {
|
|
28
12
|
eraseRectangle(enabledElement, operationData, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eraseRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseRectangle.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"eraseRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseRectangle.ts"],"names":[],"mappings":";;;AAGA,mDAAsD;AAMtD,SAAS,cAAc,CACrB,cAAqC,EACrC,aAA4B,EAC5B,MAAM,GAAG,IAAI;IAIb,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE;QAC1D,YAAY,EAAE,CAAC;KAChB,CAAC,CAAC;IAEH,IAAA,mCAAmB,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAC1D,CAAC;AAQD,SAAgB,oBAAoB,CAClC,cAAqC,EACrC,aAA4B;IAE5B,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AALD,oDAKC;AAQD,SAAgB,qBAAqB,CACnC,cAAqC,EACrC,aAA4B;IAE5B,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AALD,sDAKC"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
|
|
2
|
+
import { LabelmapToolOperationData } from '../../../types';
|
|
3
|
+
declare type OperationData = LabelmapToolOperationData & {
|
|
3
4
|
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
4
|
-
imageVolume: Types.IImageVolume;
|
|
5
|
-
volume: Types.IImageVolume;
|
|
6
|
-
segmentIndex: number;
|
|
7
|
-
segmentationId: string;
|
|
8
|
-
segmentsLocked: number[];
|
|
9
|
-
viewPlaneNormal: Types.Point3;
|
|
10
|
-
viewUp: Types.Point3;
|
|
11
|
-
constraintFn: () => boolean;
|
|
12
|
-
strategySpecificConfiguration: any;
|
|
13
5
|
};
|
|
14
6
|
export declare function eraseInsideSphere(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
15
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eraseSphere.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseSphere.ts"],"names":[],"mappings":";;;AAEA,6CAAgD;
|
|
1
|
+
{"version":3,"file":"eraseSphere.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/eraseSphere.ts"],"names":[],"mappings":";;;AAEA,6CAAgD;AAOhD,SAAgB,iBAAiB,CAC/B,cAAqC,EACrC,aAA4B;IAI5B,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE;QAC1D,YAAY,EAAE,CAAC;KAChB,CAAC,CAAC;IAEH,IAAA,6BAAgB,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AACvD,CAAC;AAXD,8CAWC"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
points: any;
|
|
6
|
-
volume: Types.IImageVolume;
|
|
7
|
-
segmentIndex: number;
|
|
8
|
-
segmentsLocked: number[];
|
|
9
|
-
viewPlaneNormal: number[];
|
|
10
|
-
viewUp: number[];
|
|
11
|
-
strategySpecificConfiguration: any;
|
|
12
|
-
constraintFn: () => boolean;
|
|
2
|
+
import { LabelmapToolOperationData } from '../../../types';
|
|
3
|
+
declare type OperationData = LabelmapToolOperationData & {
|
|
4
|
+
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
13
5
|
};
|
|
14
6
|
export declare function fillInsideCircle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
15
7
|
export declare function thresholdInsideCircle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
@@ -6,37 +6,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.fillOutsideCircle = exports.thresholdInsideCircle = exports.fillInsideCircle = 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");
|
|
9
10
|
const ellipse_1 = require("../../../utilities/math/ellipse");
|
|
10
11
|
const boundingBox_1 = require("../../../utilities/boundingBox");
|
|
11
12
|
const triggerSegmentationEvents_1 = require("../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
12
13
|
const utilities_1 = require("../../../utilities");
|
|
13
14
|
const isWithinThreshold_1 = __importDefault(require("./utils/isWithinThreshold"));
|
|
14
|
-
const
|
|
15
|
+
const getStrategyData_1 = require("./utils/getStrategyData");
|
|
16
|
+
const stackVolumeCheck_1 = require("./utils/stackVolumeCheck");
|
|
17
|
+
const { transformWorldToIndex } = core_2.utilities;
|
|
15
18
|
function fillCircle(enabledElement, operationData, threshold = false) {
|
|
16
|
-
const {
|
|
17
|
-
const { imageData, dimensions } = segmentationVolume;
|
|
18
|
-
const scalarData = segmentationVolume.getScalarData();
|
|
19
|
+
const { points, segmentsLocked, segmentIndex, segmentationId, strategySpecificConfiguration, } = operationData;
|
|
19
20
|
const { viewport } = enabledElement;
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
|
|
28
|
-
const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
|
|
29
|
-
const ellipsoidCornersIJK = [
|
|
30
|
-
transformWorldToIndex(imageData, topLeftWorld),
|
|
31
|
-
transformWorldToIndex(imageData, bottomRightWorld),
|
|
32
|
-
];
|
|
33
|
-
const boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(ellipsoidCornersIJK, dimensions);
|
|
34
|
-
const ellipseObj = {
|
|
35
|
-
center: center,
|
|
36
|
-
xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
|
|
37
|
-
yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
|
|
38
|
-
zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
|
|
39
|
-
};
|
|
21
|
+
const data = (0, getStrategyData_1.getStrategyData)({ operationData, viewport });
|
|
22
|
+
if (!data) {
|
|
23
|
+
console.warn('No data found for fillCircle');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const { imageScalarData, segmentationImageData, segmentationScalarData } = data;
|
|
27
|
+
const { ellipseObj, boundsIJK } = getEllipse(viewport, segmentationImageData, points);
|
|
40
28
|
const modifiedSlicesToUse = new Set();
|
|
41
29
|
let callback;
|
|
42
30
|
if (threshold) {
|
|
@@ -44,8 +32,8 @@ function fillCircle(enabledElement, operationData, threshold = false) {
|
|
|
44
32
|
if (segmentsLocked.includes(value)) {
|
|
45
33
|
return;
|
|
46
34
|
}
|
|
47
|
-
if ((0, isWithinThreshold_1.default)(index,
|
|
48
|
-
|
|
35
|
+
if ((0, isWithinThreshold_1.default)(index, imageScalarData, strategySpecificConfiguration)) {
|
|
36
|
+
segmentationScalarData[index] = segmentIndex;
|
|
49
37
|
modifiedSlicesToUse.add(pointIJK[2]);
|
|
50
38
|
}
|
|
51
39
|
};
|
|
@@ -55,11 +43,13 @@ function fillCircle(enabledElement, operationData, threshold = false) {
|
|
|
55
43
|
if (segmentsLocked.includes(value)) {
|
|
56
44
|
return;
|
|
57
45
|
}
|
|
58
|
-
|
|
46
|
+
segmentationScalarData[index] = segmentIndex;
|
|
59
47
|
modifiedSlicesToUse.add(pointIJK[2]);
|
|
60
48
|
};
|
|
61
49
|
}
|
|
62
|
-
(0, utilities_1.pointInShapeCallback)(
|
|
50
|
+
(0, utilities_1.pointInShapeCallback)(segmentationImageData, (pointLPS) => (0, ellipse_1.pointInEllipse)(ellipseObj, pointLPS, {
|
|
51
|
+
fast: true,
|
|
52
|
+
}), callback, boundsIJK);
|
|
63
53
|
const arrayOfSlices = Array.from(modifiedSlicesToUse);
|
|
64
54
|
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(segmentationId, arrayOfSlices);
|
|
65
55
|
}
|
|
@@ -68,10 +58,14 @@ function fillInsideCircle(enabledElement, operationData) {
|
|
|
68
58
|
}
|
|
69
59
|
exports.fillInsideCircle = fillInsideCircle;
|
|
70
60
|
function thresholdInsideCircle(enabledElement, operationData) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
+
}
|
|
75
69
|
}
|
|
76
70
|
fillCircle(enabledElement, operationData, true);
|
|
77
71
|
}
|
|
@@ -80,4 +74,35 @@ function fillOutsideCircle(enabledElement, operationData) {
|
|
|
80
74
|
throw new Error('Not yet implemented');
|
|
81
75
|
}
|
|
82
76
|
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
|
+
}
|
|
83
108
|
//# sourceMappingURL=fillCircle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fillCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillCircle.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAiC;AAEjC,8CAA2D;AAE3D,6DAGyC;AACzC,gEAA2E;AAC3E,+GAAkH;AAClH,kDAA0D;AAC1D,kFAA0D;AAE1D,MAAM,EAAE,qBAAqB,EAAE,GAAG,gBAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"fillCircle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillCircle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import { ImageVolume } from '@cornerstonejs/core';
|
|
2
1
|
import type { Types } from '@cornerstonejs/core';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { LabelmapToolOperationData } from '../../../types';
|
|
3
|
+
declare type OperationData = LabelmapToolOperationData & {
|
|
5
4
|
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
6
|
-
volume: ImageVolume;
|
|
7
|
-
constraintFn: (x: [number, number, number]) => boolean;
|
|
8
|
-
segmentIndex: number;
|
|
9
|
-
segmentsLocked: number[];
|
|
10
5
|
};
|
|
11
6
|
export declare function fillInsideRectangle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
12
7
|
export declare function fillOutsideRectangle(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
@@ -5,34 +5,42 @@ const core_1 = require("@cornerstonejs/core");
|
|
|
5
5
|
const boundingBox_1 = require("../../../utilities/boundingBox");
|
|
6
6
|
const utilities_1 = require("../../../utilities");
|
|
7
7
|
const triggerSegmentationEvents_1 = require("../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
8
|
+
const getStrategyData_1 = require("./utils/getStrategyData");
|
|
8
9
|
const { transformWorldToIndex } = core_1.utilities;
|
|
9
10
|
function fillRectangle(enabledElement, operationData, inside = true) {
|
|
10
|
-
const {
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const { points, segmentsLocked, segmentIndex, segmentationId, constraintFn } = operationData;
|
|
12
|
+
const strategyData = (0, getStrategyData_1.getStrategyData)({
|
|
13
|
+
operationData,
|
|
14
|
+
viewport: enabledElement.viewport,
|
|
15
|
+
});
|
|
16
|
+
if (!strategyData) {
|
|
17
|
+
console.warn('No data found for fillRectangle');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const { segmentationImageData, segmentationScalarData } = strategyData;
|
|
13
21
|
let rectangleCornersIJK = points.map((world) => {
|
|
14
|
-
return transformWorldToIndex(
|
|
22
|
+
return transformWorldToIndex(segmentationImageData, world);
|
|
15
23
|
});
|
|
16
24
|
rectangleCornersIJK = rectangleCornersIJK.map((point) => {
|
|
17
25
|
return point.map((coord) => {
|
|
18
26
|
return Math.round(coord);
|
|
19
27
|
});
|
|
20
28
|
});
|
|
21
|
-
const boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(rectangleCornersIJK,
|
|
29
|
+
const boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(rectangleCornersIJK, segmentationImageData.getDimensions());
|
|
22
30
|
const pointInRectangle = () => true;
|
|
23
31
|
const callback = ({ value, index, pointIJK }) => {
|
|
24
32
|
if (segmentsLocked.includes(value)) {
|
|
25
33
|
return;
|
|
26
34
|
}
|
|
27
35
|
if (!constraintFn) {
|
|
28
|
-
|
|
36
|
+
segmentationScalarData[index] = segmentIndex;
|
|
29
37
|
return;
|
|
30
38
|
}
|
|
31
39
|
if (constraintFn(pointIJK)) {
|
|
32
|
-
|
|
40
|
+
segmentationScalarData[index] = segmentIndex;
|
|
33
41
|
}
|
|
34
42
|
};
|
|
35
|
-
(0, utilities_1.pointInShapeCallback)(
|
|
43
|
+
(0, utilities_1.pointInShapeCallback)(segmentationImageData, pointInRectangle, callback, boundsIJK);
|
|
36
44
|
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(segmentationId);
|
|
37
45
|
}
|
|
38
46
|
function fillInsideRectangle(enabledElement, operationData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fillRectangle.js","sourceRoot":"","sources":["../../../../../src/tools/segmentation/strategies/fillRectangle.ts"],"names":[],"mappings":";;;AAAA,
|
|
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;AAe1C,SAAS,aAAa,CACpB,cAAqC,EACrC,aAA4B,EAC5B,MAAM,GAAG,IAAI;IAEb,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,GAC1E,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,QAAQ,EAAE,EAAE,EAAE;QAC9C,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,sBAAsB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;YAC7C,OAAO;SACR;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;YAC1B,sBAAsB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;SAC9C;IACH,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;AASD,SAAgB,mBAAmB,CACjC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AALD,kDAKC;AASD,SAAgB,oBAAoB,CAClC,cAAqC,EACrC,aAA4B;IAE5B,aAAa,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AALD,oDAKC"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
|
|
2
|
+
import { LabelmapToolOperationData } from '../../../types';
|
|
3
|
+
declare type OperationData = LabelmapToolOperationData & {
|
|
3
4
|
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
4
|
-
volume: Types.IImageVolume;
|
|
5
|
-
imageVolume: Types.IImageVolume;
|
|
6
|
-
segmentIndex: number;
|
|
7
|
-
segmentationId: string;
|
|
8
|
-
segmentsLocked: number[];
|
|
9
|
-
viewPlaneNormal: Types.Point3;
|
|
10
|
-
viewUp: Types.Point3;
|
|
11
|
-
strategySpecificConfiguration: any;
|
|
12
|
-
constraintFn: () => boolean;
|
|
13
5
|
};
|
|
14
6
|
export declare function fillInsideSphere(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
15
7
|
export declare function thresholdInsideSphere(enabledElement: Types.IEnabledElement, operationData: OperationData): void;
|
|
@@ -8,20 +8,26 @@ const core_1 = require("@cornerstonejs/core");
|
|
|
8
8
|
const triggerSegmentationEvents_1 = require("../../../stateManagement/segmentation/triggerSegmentationEvents");
|
|
9
9
|
const utilities_1 = require("../../../utilities");
|
|
10
10
|
const isWithinThreshold_1 = __importDefault(require("./utils/isWithinThreshold"));
|
|
11
|
+
const getStrategyData_1 = require("./utils/getStrategyData");
|
|
12
|
+
const stackVolumeCheck_1 = require("./utils/stackVolumeCheck");
|
|
11
13
|
function fillSphere(enabledElement, operationData, _inside = true, threshold = false) {
|
|
12
14
|
const { viewport } = enabledElement;
|
|
13
|
-
const {
|
|
14
|
-
const {
|
|
15
|
-
|
|
15
|
+
const { segmentsLocked, segmentIndex, strategySpecificConfiguration, points, } = operationData;
|
|
16
|
+
const strategyData = (0, getStrategyData_1.getStrategyData)({ operationData, viewport });
|
|
17
|
+
if (!strategyData) {
|
|
18
|
+
console.warn('No data found for fillSphere');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const { imageScalarData, segmentationImageData, segmentationScalarData } = strategyData;
|
|
16
22
|
const scalarIndex = [];
|
|
17
23
|
let callback;
|
|
18
24
|
if (threshold) {
|
|
19
|
-
callback = ({ value, index
|
|
25
|
+
callback = ({ value, index }) => {
|
|
20
26
|
if (segmentsLocked.includes(value)) {
|
|
21
27
|
return;
|
|
22
28
|
}
|
|
23
|
-
if ((0, isWithinThreshold_1.default)(index,
|
|
24
|
-
|
|
29
|
+
if ((0, isWithinThreshold_1.default)(index, imageScalarData, strategySpecificConfiguration)) {
|
|
30
|
+
segmentationScalarData[index] = segmentIndex;
|
|
25
31
|
scalarIndex.push(index);
|
|
26
32
|
}
|
|
27
33
|
};
|
|
@@ -31,26 +37,34 @@ function fillSphere(enabledElement, operationData, _inside = true, threshold = f
|
|
|
31
37
|
if (segmentsLocked.includes(value)) {
|
|
32
38
|
return;
|
|
33
39
|
}
|
|
34
|
-
|
|
40
|
+
segmentationScalarData[index] = segmentIndex;
|
|
35
41
|
scalarIndex.push(index);
|
|
36
42
|
};
|
|
37
43
|
}
|
|
38
|
-
(0, utilities_1.pointInSurroundingSphereCallback)(
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
(0, utilities_1.pointInSurroundingSphereCallback)(segmentationImageData, [points[0], points[1]], callback, viewport);
|
|
45
|
+
const dimensions = segmentationImageData.getDimensions();
|
|
46
|
+
let sliceArray;
|
|
47
|
+
if ((0, stackVolumeCheck_1.isVolumeSegmentation)(operationData)) {
|
|
48
|
+
const zMultiple = dimensions[0] * dimensions[1];
|
|
49
|
+
const minSlice = Math.floor(scalarIndex[0] / zMultiple);
|
|
50
|
+
const maxSlice = Math.floor(scalarIndex[scalarIndex.length - 1] / zMultiple);
|
|
51
|
+
sliceArray = Array.from({ length: maxSlice - minSlice + 1 }, (v, k) => k + minSlice);
|
|
52
|
+
(0, triggerSegmentationEvents_1.triggerSegmentationDataModified)(operationData.volumeId, sliceArray);
|
|
53
|
+
}
|
|
44
54
|
}
|
|
45
55
|
function fillInsideSphere(enabledElement, operationData) {
|
|
46
56
|
fillSphere(enabledElement, operationData, true);
|
|
47
57
|
}
|
|
48
58
|
exports.fillInsideSphere = fillInsideSphere;
|
|
49
59
|
function thresholdInsideSphere(enabledElement, operationData) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
if ((0, stackVolumeCheck_1.isVolumeSegmentation)(operationData)) {
|
|
61
|
+
const { referencedVolumeId, volumeId } = operationData;
|
|
62
|
+
const imageVolume = core_1.cache.getVolume(referencedVolumeId);
|
|
63
|
+
const segmentation = core_1.cache.getVolume(volumeId);
|
|
64
|
+
if (!core_1.utilities.isEqual(segmentation.dimensions, imageVolume.dimensions) ||
|
|
65
|
+
!core_1.utilities.isEqual(segmentation.direction, imageVolume.direction)) {
|
|
66
|
+
throw new Error('Only source data the same dimensions/size/orientation as the segmentation currently supported.');
|
|
67
|
+
}
|
|
54
68
|
}
|
|
55
69
|
fillSphere(enabledElement, operationData, true, true);
|
|
56
70
|
}
|