@cornerstonejs/tools 2.0.0-beta.2 → 2.0.0-beta.3
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/getSvgDrawingHelper.js +1 -1
- package/dist/cjs/drawingSvg/getSvgDrawingHelper.js.map +1 -1
- package/dist/cjs/enums/Events.d.ts +1 -0
- package/dist/cjs/enums/Events.js +1 -0
- package/dist/cjs/enums/Events.js.map +1 -1
- package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDown.js +6 -1
- package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDown.js.map +1 -1
- package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +2 -0
- package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +41 -0
- package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js.map +1 -0
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +3 -0
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +39 -0
- package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -0
- package/dist/cjs/eventListeners/mouse/mouseDownListener.js +5 -1
- package/dist/cjs/eventListeners/mouse/mouseDownListener.js.map +1 -1
- package/dist/cjs/eventListeners/mouse/mouseMoveListener.js +5 -1
- package/dist/cjs/eventListeners/mouse/mouseMoveListener.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +5 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +2 -0
- package/dist/cjs/store/ToolGroupManager/ToolGroup.js +35 -0
- package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
- package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js +1 -1
- package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
- package/dist/cjs/tools/AdvancedMagnifyTool.d.ts +36 -0
- package/dist/cjs/tools/AdvancedMagnifyTool.js +448 -0
- package/dist/cjs/tools/AdvancedMagnifyTool.js.map +1 -0
- package/dist/cjs/tools/AdvancedMagnifyViewport.d.ts +76 -0
- package/dist/cjs/tools/AdvancedMagnifyViewport.js +352 -0
- package/dist/cjs/tools/AdvancedMagnifyViewport.js.map +1 -0
- package/dist/cjs/tools/AdvancedMagnifyViewportManager.d.ts +36 -0
- package/dist/cjs/tools/AdvancedMagnifyViewportManager.js +133 -0
- package/dist/cjs/tools/AdvancedMagnifyViewportManager.js.map +1 -0
- package/dist/cjs/tools/MagnifyTool.js +2 -2
- package/dist/cjs/tools/MagnifyTool.js.map +1 -1
- package/dist/cjs/tools/OrientationMarkerTool.d.ts +88 -0
- package/dist/cjs/tools/OrientationMarkerTool.js +193 -0
- package/dist/cjs/tools/OrientationMarkerTool.js.map +1 -0
- package/dist/cjs/tools/OverlayGridTool.d.ts +31 -0
- package/dist/cjs/tools/OverlayGridTool.js +170 -0
- package/dist/cjs/tools/OverlayGridTool.js.map +1 -0
- package/dist/cjs/tools/ReferenceLinesTool.d.ts +3 -0
- package/dist/cjs/tools/ReferenceLinesTool.js +71 -2
- package/dist/cjs/tools/ReferenceLinesTool.js.map +1 -1
- package/dist/cjs/tools/annotation/AngleTool.js +2 -1
- package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/BidirectionalTool.js +1 -1
- package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/cjs/tools/annotation/CircleROITool.d.ts +1 -2
- package/dist/cjs/tools/annotation/CircleROITool.js +8 -8
- package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/CobbAngleTool.d.ts +31 -5
- package/dist/cjs/tools/annotation/CobbAngleTool.js +268 -71
- package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/DragProbeTool.js +4 -3
- package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.d.ts +2 -3
- package/dist/cjs/tools/annotation/EllipticalROITool.js +20 -16
- package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/LengthTool.js +1 -1
- package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +1 -2
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +22 -9
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/ProbeTool.d.ts +1 -2
- package/dist/cjs/tools/annotation/ProbeTool.js +10 -9
- package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/RectangleROITool.d.ts +1 -1
- package/dist/cjs/tools/annotation/RectangleROITool.js +9 -9
- package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
- package/dist/cjs/tools/base/AnnotationDisplayTool.js +4 -0
- package/dist/cjs/tools/base/AnnotationDisplayTool.js.map +1 -1
- package/dist/cjs/tools/base/AnnotationTool.d.ts +1 -1
- package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
- package/dist/cjs/tools/displayTools/Contour/contourDisplay.js +3 -0
- package/dist/cjs/tools/displayTools/Contour/contourDisplay.js.map +1 -1
- package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +1 -1
- package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
- package/dist/cjs/tools/index.d.ts +4 -1
- package/dist/cjs/tools/index.js +7 -1
- package/dist/cjs/tools/index.js.map +1 -1
- package/dist/cjs/types/EventTypes.d.ts +9 -1
- package/dist/cjs/types/IToolGroup.d.ts +3 -0
- package/dist/cjs/types/ToolAction.d.ts +8 -0
- package/dist/cjs/types/ToolAction.js +3 -0
- package/dist/cjs/types/ToolAction.js.map +1 -0
- package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +55 -0
- package/dist/cjs/types/index.d.ts +2 -1
- package/dist/cjs/utilities/getModalityUnit.js +5 -2
- package/dist/cjs/utilities/getModalityUnit.js.map +1 -1
- package/dist/cjs/utilities/index.d.ts +2 -2
- package/dist/cjs/utilities/index.js +4 -3
- package/dist/cjs/utilities/index.js.map +1 -1
- package/dist/cjs/utilities/math/angle/angleBetweenLines.d.ts +3 -1
- package/dist/cjs/utilities/math/angle/angleBetweenLines.js +18 -1
- package/dist/cjs/utilities/math/angle/angleBetweenLines.js.map +1 -1
- package/dist/cjs/utilities/stackPrefetch/index.d.ts +3 -2
- package/dist/cjs/utilities/stackPrefetch/index.js +8 -6
- package/dist/cjs/utilities/stackPrefetch/index.js.map +1 -1
- package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.d.ts +16 -0
- package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js +227 -0
- package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -0
- package/dist/cjs/utilities/stackPrefetch/stackPrefetch.d.ts +7 -1
- package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js +23 -93
- package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
- package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.d.ts +14 -0
- package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js +85 -0
- package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -0
- package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
- package/dist/esm/drawingSvg/getSvgDrawingHelper.js.map +1 -1
- package/dist/esm/enums/Events.d.ts +1 -0
- package/dist/esm/enums/Events.js +1 -0
- package/dist/esm/enums/Events.js.map +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js +6 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js.map +1 -1
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +2 -0
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +35 -0
- package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js.map +1 -0
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +3 -0
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +32 -0
- package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -0
- package/dist/esm/eventListeners/mouse/mouseDownListener.js +5 -1
- package/dist/esm/eventListeners/mouse/mouseDownListener.js.map +1 -1
- package/dist/esm/eventListeners/mouse/mouseMoveListener.js +5 -1
- package/dist/esm/eventListeners/mouse/mouseMoveListener.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +2 -0
- package/dist/esm/store/ToolGroupManager/ToolGroup.js +35 -1
- package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
- package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js +1 -1
- package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
- package/dist/esm/tools/AdvancedMagnifyTool.d.ts +36 -0
- package/dist/esm/tools/AdvancedMagnifyTool.js +440 -0
- package/dist/esm/tools/AdvancedMagnifyTool.js.map +1 -0
- package/dist/esm/tools/AdvancedMagnifyViewport.d.ts +76 -0
- package/dist/esm/tools/AdvancedMagnifyViewport.js +346 -0
- package/dist/esm/tools/AdvancedMagnifyViewport.js.map +1 -0
- package/dist/esm/tools/AdvancedMagnifyViewportManager.d.ts +36 -0
- package/dist/esm/tools/AdvancedMagnifyViewportManager.js +128 -0
- package/dist/esm/tools/AdvancedMagnifyViewportManager.js.map +1 -0
- package/dist/esm/tools/MagnifyTool.js +2 -2
- package/dist/esm/tools/MagnifyTool.js.map +1 -1
- package/dist/esm/tools/OrientationMarkerTool.d.ts +88 -0
- package/dist/esm/tools/OrientationMarkerTool.js +185 -0
- package/dist/esm/tools/OrientationMarkerTool.js.map +1 -0
- package/dist/esm/tools/OverlayGridTool.d.ts +31 -0
- package/dist/esm/tools/OverlayGridTool.js +165 -0
- package/dist/esm/tools/OverlayGridTool.js.map +1 -0
- package/dist/esm/tools/ReferenceLinesTool.d.ts +3 -0
- package/dist/esm/tools/ReferenceLinesTool.js +71 -2
- package/dist/esm/tools/ReferenceLinesTool.js.map +1 -1
- package/dist/esm/tools/annotation/AngleTool.js +2 -1
- package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/BidirectionalTool.js +1 -1
- package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -2
- package/dist/esm/tools/annotation/CircleROITool.js +8 -8
- package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/esm/tools/annotation/CobbAngleTool.d.ts +31 -5
- package/dist/esm/tools/annotation/CobbAngleTool.js +275 -72
- package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/DragProbeTool.js +4 -3
- package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.d.ts +2 -3
- package/dist/esm/tools/annotation/EllipticalROITool.js +20 -16
- package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/esm/tools/annotation/LengthTool.js +1 -1
- package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
- package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +1 -2
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +22 -9
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/esm/tools/annotation/ProbeTool.d.ts +1 -2
- package/dist/esm/tools/annotation/ProbeTool.js +10 -9
- package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/RectangleROITool.d.ts +1 -1
- package/dist/esm/tools/annotation/RectangleROITool.js +9 -9
- package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
- package/dist/esm/tools/base/AnnotationDisplayTool.js +3 -0
- package/dist/esm/tools/base/AnnotationDisplayTool.js.map +1 -1
- package/dist/esm/tools/base/AnnotationTool.d.ts +1 -1
- package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
- package/dist/esm/tools/displayTools/Contour/contourDisplay.js +4 -1
- package/dist/esm/tools/displayTools/Contour/contourDisplay.js.map +1 -1
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +1 -1
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
- package/dist/esm/tools/index.d.ts +4 -1
- package/dist/esm/tools/index.js +4 -1
- package/dist/esm/tools/index.js.map +1 -1
- package/dist/esm/types/EventTypes.d.ts +9 -1
- package/dist/esm/types/IToolGroup.d.ts +3 -0
- package/dist/esm/types/ToolAction.d.ts +8 -0
- package/dist/esm/types/ToolAction.js +2 -0
- package/dist/esm/types/ToolAction.js.map +1 -0
- package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +55 -0
- package/dist/esm/types/index.d.ts +2 -1
- package/dist/esm/utilities/getModalityUnit.js +5 -2
- package/dist/esm/utilities/getModalityUnit.js.map +1 -1
- package/dist/esm/utilities/index.d.ts +2 -2
- package/dist/esm/utilities/index.js +2 -2
- package/dist/esm/utilities/index.js.map +1 -1
- package/dist/esm/utilities/math/angle/angleBetweenLines.d.ts +3 -1
- package/dist/esm/utilities/math/angle/angleBetweenLines.js +19 -2
- package/dist/esm/utilities/math/angle/angleBetweenLines.js.map +1 -1
- package/dist/esm/utilities/stackPrefetch/index.d.ts +3 -2
- package/dist/esm/utilities/stackPrefetch/index.js +3 -2
- package/dist/esm/utilities/stackPrefetch/index.js.map +1 -1
- package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.d.ts +16 -0
- package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js +220 -0
- package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -0
- package/dist/esm/utilities/stackPrefetch/stackPrefetch.d.ts +7 -1
- package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +12 -79
- package/dist/esm/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
- package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.d.ts +14 -0
- package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js +77 -0
- package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -0
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
- package/src/drawingSvg/getSvgDrawingHelper.ts +4 -1
- package/src/enums/Events.ts +9 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +11 -2
- package/src/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.ts +72 -0
- package/src/eventDispatchers/shared/getToolsWithActionsForMouseEvent.ts +66 -0
- package/src/eventListeners/mouse/mouseDownListener.ts +7 -1
- package/src/eventListeners/mouse/mouseMoveListener.ts +7 -1
- package/src/index.ts +6 -0
- package/src/store/ToolGroupManager/ToolGroup.ts +79 -2
- package/src/synchronizers/callbacks/stackImageSyncCallback.ts +1 -1
- package/src/tools/AdvancedMagnifyTool.ts +725 -0
- package/src/tools/AdvancedMagnifyViewport.ts +624 -0
- package/src/tools/AdvancedMagnifyViewportManager.ts +291 -0
- package/src/tools/MagnifyTool.ts +2 -2
- package/src/tools/OrientationMarkerTool.ts +235 -0
- package/src/tools/OverlayGridTool.ts +357 -0
- package/src/tools/ReferenceLinesTool.ts +131 -3
- package/src/tools/annotation/AngleTool.ts +4 -1
- package/src/tools/annotation/BidirectionalTool.ts +1 -1
- package/src/tools/annotation/CircleROITool.ts +13 -20
- package/src/tools/annotation/CobbAngleTool.ts +422 -99
- package/src/tools/annotation/DragProbeTool.ts +6 -13
- package/src/tools/annotation/EllipticalROITool.ts +28 -29
- package/src/tools/annotation/LengthTool.ts +1 -1
- package/src/tools/annotation/PlanarFreehandROITool.ts +35 -20
- package/src/tools/annotation/ProbeTool.ts +17 -30
- package/src/tools/annotation/RectangleROITool.ts +15 -19
- package/src/tools/base/AnnotationDisplayTool.ts +4 -0
- package/src/tools/base/AnnotationTool.ts +2 -1
- package/src/tools/displayTools/Contour/contourDisplay.ts +8 -0
- package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +1 -1
- package/src/tools/index.ts +6 -0
- package/src/types/EventTypes.ts +23 -0
- package/src/types/IToolGroup.ts +7 -0
- package/src/types/ToolAction.ts +54 -0
- package/src/types/ToolSpecificAnnotationTypes.ts +58 -0
- package/src/types/index.ts +2 -0
- package/src/utilities/getModalityUnit.ts +8 -2
- package/src/utilities/index.ts +2 -1
- package/src/utilities/math/angle/angleBetweenLines.ts +39 -9
- package/src/utilities/stackPrefetch/index.ts +3 -7
- package/src/utilities/stackPrefetch/stackContextPrefetch.ts +380 -0
- package/src/utilities/stackPrefetch/stackPrefetch.ts +29 -151
- package/src/utilities/stackPrefetch/stackPrefetchUtils.ts +114 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/tools",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.3",
|
|
4
4
|
"description": "Cornerstone3D Tools",
|
|
5
5
|
"main": "dist/umd/index.js",
|
|
6
6
|
"types": "dist/esm/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"webpack:watch": "webpack --mode development --progress --watch --config ./.webpack/webpack.dev.js"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@cornerstonejs/core": "^2.0.0-beta.
|
|
32
|
+
"@cornerstonejs/core": "^2.0.0-beta.3",
|
|
33
33
|
"lodash.clonedeep": "4.5.0",
|
|
34
34
|
"lodash.get": "^4.4.2"
|
|
35
35
|
},
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"type": "individual",
|
|
53
53
|
"url": "https://ohif.org/donate"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "d78cf780d4383a61ea0a9762bafa4104666757a4"
|
|
56
56
|
}
|
|
@@ -38,7 +38,10 @@ function getSvgDrawingHelper(element: HTMLDivElement): SVGDrawingHelper {
|
|
|
38
38
|
function _getSvgLayer(element) {
|
|
39
39
|
const viewportElement = `.${VIEWPORT_ELEMENT}`;
|
|
40
40
|
const internalDivElement = element.querySelector(viewportElement);
|
|
41
|
-
|
|
41
|
+
|
|
42
|
+
// Using :scope to make sure the right svg layer is selected otherwise it
|
|
43
|
+
// may select one from a nested viewport (eg: AdvancedMagnifyTool).
|
|
44
|
+
const svgLayer = internalDivElement.querySelector(':scope > .svg-layer');
|
|
42
45
|
|
|
43
46
|
return svgLayer;
|
|
44
47
|
}
|
package/src/enums/Events.ts
CHANGED
|
@@ -18,6 +18,15 @@ enum Events {
|
|
|
18
18
|
*/
|
|
19
19
|
TOOL_ACTIVATED = 'CORNERSTONE_TOOLS_TOOL_ACTIVATED',
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Triggers on the eventTarget when a mode of a tool is changed (active, passive, enabled and disabled).
|
|
23
|
+
*
|
|
24
|
+
* Make use of {@link EventTypes.ToolModeChangedEventType | Tool Mode Changed Event Type }
|
|
25
|
+
* for typing your event listeners for this tool activated event, and see what event
|
|
26
|
+
* detail is included in {@link EventTypes.ToolModeChangedEventDetail | Tool Mode Changed Event Detail}.
|
|
27
|
+
*/
|
|
28
|
+
TOOL_MODE_CHANGED = 'CORNERSTONE_TOOLS_TOOL_MODE_CHANGED',
|
|
29
|
+
|
|
21
30
|
///////////////////////////////////////
|
|
22
31
|
// Annotations
|
|
23
32
|
///////////////////////////////////////
|
|
@@ -20,6 +20,7 @@ import filterToolsWithAnnotationsForElement from '../../store/filterToolsWithAnn
|
|
|
20
20
|
import filterMoveableAnnotationTools from '../../store/filterMoveableAnnotationTools';
|
|
21
21
|
import getActiveToolForMouseEvent from '../shared/getActiveToolForMouseEvent';
|
|
22
22
|
import getToolsWithModesForMouseEvent from '../shared/getToolsWithModesForMouseEvent';
|
|
23
|
+
import mouseDownAnnotationAction from './mouseDownAnnotationAction';
|
|
23
24
|
|
|
24
25
|
const { Active, Passive } = ToolModes;
|
|
25
26
|
|
|
@@ -39,8 +40,10 @@ const { Active, Passive } = ToolModes;
|
|
|
39
40
|
* - Next we check any tools are interactable (e.g. moving an entire length annotation rather than one of its handles:
|
|
40
41
|
* `filterMoveableAnnotationTools`). If interactable tools are found, the first tool found consumes the event and the
|
|
41
42
|
* event does not propagate further.
|
|
42
|
-
* -
|
|
43
|
+
* - If the `activeTool` has `postMouseDownCallback`, this is called. If the callback returns `true`,
|
|
43
44
|
* the event does not propagate further.
|
|
45
|
+
* - Finally, look for annotations actions that could handle the event such as showing a dropdown to allow the user
|
|
46
|
+
* change the magnifying glass zoom factor.
|
|
44
47
|
*
|
|
45
48
|
* If the event is not consumed the event will bubble to the `mouseDownActivate` handler.
|
|
46
49
|
*
|
|
@@ -133,7 +136,7 @@ export default function mouseDown(evt: EventTypes.MouseDownEventType) {
|
|
|
133
136
|
);
|
|
134
137
|
|
|
135
138
|
toggleAnnotationSelection(annotation.annotationUID, isMultiSelect);
|
|
136
|
-
tool.toolSelectedCallback(evt, annotation, 'Mouse');
|
|
139
|
+
tool.toolSelectedCallback(evt, annotation, 'Mouse', canvasCoords);
|
|
137
140
|
|
|
138
141
|
return;
|
|
139
142
|
}
|
|
@@ -148,6 +151,12 @@ export default function mouseDown(evt: EventTypes.MouseDownEventType) {
|
|
|
148
151
|
}
|
|
149
152
|
}
|
|
150
153
|
|
|
154
|
+
const actionExecuted = mouseDownAnnotationAction(evt);
|
|
155
|
+
|
|
156
|
+
if (actionExecuted) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
151
160
|
// Don't stop propagation so that mouseDownActivate can handle the event
|
|
152
161
|
}
|
|
153
162
|
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { getEnabledElement } from '@cornerstonejs/core';
|
|
2
|
+
import { state } from '../../store';
|
|
3
|
+
import { ToolModes } from '../../enums';
|
|
4
|
+
import { EventTypes } from '../../types';
|
|
5
|
+
|
|
6
|
+
// Util
|
|
7
|
+
import filterToolsWithAnnotationsForElement from '../../store/filterToolsWithAnnotationsForElement';
|
|
8
|
+
import filterMoveableAnnotationTools from '../../store/filterMoveableAnnotationTools';
|
|
9
|
+
import getToolsWithActionsForMouseEvent from '../shared/getToolsWithActionsForMouseEvent';
|
|
10
|
+
|
|
11
|
+
const { Active, Passive } = ToolModes;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Look for active or passive annotations with an action that could handle the
|
|
15
|
+
* event based on the bindings and invoke the first one found.
|
|
16
|
+
*
|
|
17
|
+
* @param evt - The normalized mouseDown event.
|
|
18
|
+
* @returns True if an action has executed or false otherwise
|
|
19
|
+
*/
|
|
20
|
+
export default function mouseDownAnnotationAction(
|
|
21
|
+
evt: EventTypes.MouseDownEventType
|
|
22
|
+
): boolean {
|
|
23
|
+
// If a tool has locked the current state it is dealing with an interaction within its own eventLoop.
|
|
24
|
+
if (state.isInteractingWithTool) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const eventDetail = evt.detail;
|
|
29
|
+
const { element } = eventDetail;
|
|
30
|
+
const enabledElement = getEnabledElement(element);
|
|
31
|
+
const { canvas: canvasCoords } = eventDetail.currentPoints;
|
|
32
|
+
|
|
33
|
+
if (!enabledElement) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Find all tools that might respond to this mouse down
|
|
38
|
+
const toolsWithActions = getToolsWithActionsForMouseEvent(evt, [
|
|
39
|
+
Active,
|
|
40
|
+
Passive,
|
|
41
|
+
]);
|
|
42
|
+
|
|
43
|
+
const tools = Array.from(toolsWithActions.keys());
|
|
44
|
+
|
|
45
|
+
// Filter tools with annotations for this element
|
|
46
|
+
const annotationToolsWithAnnotations = filterToolsWithAnnotationsForElement(
|
|
47
|
+
element,
|
|
48
|
+
tools
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// Only moveable annotations (unlocked, visible and close to the canvas coordinates) may trigger actions
|
|
52
|
+
const moveableAnnotationTools = filterMoveableAnnotationTools(
|
|
53
|
+
element,
|
|
54
|
+
annotationToolsWithAnnotations,
|
|
55
|
+
canvasCoords
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
// If there are annotation tools that are interactable, select the first one
|
|
59
|
+
// that isn't locked. If there's only one annotation tool, select it.
|
|
60
|
+
if (moveableAnnotationTools.length > 0) {
|
|
61
|
+
const { tool, annotation } = moveableAnnotationTools[0];
|
|
62
|
+
const action = toolsWithActions.get(tool);
|
|
63
|
+
const method =
|
|
64
|
+
typeof action.method === 'string' ? tool[action.method] : action.method;
|
|
65
|
+
|
|
66
|
+
method.call(tool, evt, annotation);
|
|
67
|
+
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ToolGroupManager } from '../../store';
|
|
2
|
+
import { ToolModes } from '../../enums';
|
|
3
|
+
import { ToolAction, EventTypes } from '../../types';
|
|
4
|
+
|
|
5
|
+
import { keyEventListener } from '../../eventListeners';
|
|
6
|
+
import getMouseModifier from './getMouseModifier';
|
|
7
|
+
|
|
8
|
+
type ModesFilter = Array<ToolModes>;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Given the mouse event and a list of tool modes, find all tool instances
|
|
12
|
+
* with actions that were added to the tool group associated with the viewport
|
|
13
|
+
* that triggered the event.
|
|
14
|
+
*
|
|
15
|
+
* @param evt - mouseDown event triggered by a cornerstone viewport
|
|
16
|
+
* @param toolModes - List of tool modes used to filter the tools registered
|
|
17
|
+
* in the viewport's tool group
|
|
18
|
+
*/
|
|
19
|
+
export default function getToolsWithActionsForMouseEvent(
|
|
20
|
+
evt: EventTypes.MouseMoveEventType,
|
|
21
|
+
toolModes: ToolModes[]
|
|
22
|
+
): Map<any, ToolAction> {
|
|
23
|
+
const toolsWithActions = new Map();
|
|
24
|
+
const { renderingEngineId, viewportId } = evt.detail;
|
|
25
|
+
const toolGroup = ToolGroupManager.getToolGroupForViewport(
|
|
26
|
+
viewportId,
|
|
27
|
+
renderingEngineId
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
if (!toolGroup) {
|
|
31
|
+
return toolsWithActions;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const toolGroupToolNames = Object.keys(toolGroup.toolOptions);
|
|
35
|
+
const defaultMousePrimary = toolGroup.getDefaultMousePrimary();
|
|
36
|
+
const mouseEvent = evt.detail.event;
|
|
37
|
+
const mouseButton = mouseEvent?.buttons ?? defaultMousePrimary;
|
|
38
|
+
const modifierKey =
|
|
39
|
+
getMouseModifier(mouseEvent) || keyEventListener.getModifierKey();
|
|
40
|
+
|
|
41
|
+
for (let j = 0; j < toolGroupToolNames.length; j++) {
|
|
42
|
+
const toolName = toolGroupToolNames[j];
|
|
43
|
+
const tool = toolGroup.getToolInstance(toolName);
|
|
44
|
+
const actions = tool.configuration?.actions;
|
|
45
|
+
|
|
46
|
+
if (!actions?.length || !toolModes.includes(tool.mode)) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const action = actions.find(
|
|
51
|
+
(action) =>
|
|
52
|
+
action.bindings.length &&
|
|
53
|
+
action.bindings.some(
|
|
54
|
+
(binding) =>
|
|
55
|
+
binding.mouseButton === mouseButton &&
|
|
56
|
+
binding.modifierKey === modifierKey
|
|
57
|
+
)
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (action) {
|
|
61
|
+
toolsWithActions.set(tool, action);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return toolsWithActions;
|
|
66
|
+
}
|
|
@@ -262,7 +262,13 @@ function _onMouseDrag(evt: MouseEvent) {
|
|
|
262
262
|
deltaPoints,
|
|
263
263
|
};
|
|
264
264
|
|
|
265
|
-
triggerEvent(state.element, MOUSE_DRAG, eventDetail);
|
|
265
|
+
const consumed = !triggerEvent(state.element, MOUSE_DRAG, eventDetail);
|
|
266
|
+
|
|
267
|
+
// Events.MOUSE_DRAG was consumed, thus no other listener should handle this event.
|
|
268
|
+
if (consumed) {
|
|
269
|
+
evt.stopImmediatePropagation();
|
|
270
|
+
evt.preventDefault();
|
|
271
|
+
}
|
|
266
272
|
|
|
267
273
|
// Update the last points
|
|
268
274
|
state.lastPoints = _copyPoints(currentPoints);
|
|
@@ -27,7 +27,13 @@ function mouseMoveListener(evt: MouseEvent) {
|
|
|
27
27
|
event: evt,
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
triggerEvent(element, eventName, eventDetail);
|
|
30
|
+
const consumed = !triggerEvent(element, eventName, eventDetail);
|
|
31
|
+
|
|
32
|
+
// Events.MOUSE_MOVE was consumed, thus no other listener should handle this event.
|
|
33
|
+
if (consumed) {
|
|
34
|
+
evt.stopImmediatePropagation();
|
|
35
|
+
evt.preventDefault();
|
|
36
|
+
}
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
export default mouseMoveListener;
|
package/src/index.ts
CHANGED
|
@@ -54,10 +54,13 @@ import {
|
|
|
54
54
|
AngleTool,
|
|
55
55
|
CobbAngleTool,
|
|
56
56
|
MagnifyTool,
|
|
57
|
+
AdvancedMagnifyTool,
|
|
57
58
|
ReferenceCursors,
|
|
58
59
|
ReferenceLines,
|
|
59
60
|
PaintFillTool,
|
|
60
61
|
ScaleOverlayTool,
|
|
62
|
+
OrientationMarkerTool,
|
|
63
|
+
OverlayGridTool,
|
|
61
64
|
} from './tools';
|
|
62
65
|
|
|
63
66
|
import * as Enums from './enums';
|
|
@@ -88,6 +91,7 @@ export {
|
|
|
88
91
|
LengthTool,
|
|
89
92
|
CrosshairsTool,
|
|
90
93
|
ReferenceLinesTool,
|
|
94
|
+
OverlayGridTool,
|
|
91
95
|
ProbeTool,
|
|
92
96
|
RectangleROITool,
|
|
93
97
|
EllipticalROITool,
|
|
@@ -98,6 +102,7 @@ export {
|
|
|
98
102
|
AngleTool,
|
|
99
103
|
CobbAngleTool,
|
|
100
104
|
MagnifyTool,
|
|
105
|
+
AdvancedMagnifyTool,
|
|
101
106
|
ReferenceCursors,
|
|
102
107
|
ReferenceLines,
|
|
103
108
|
ScaleOverlayTool,
|
|
@@ -110,6 +115,7 @@ export {
|
|
|
110
115
|
RectangleROIThresholdTool,
|
|
111
116
|
RectangleROIStartEndThresholdTool,
|
|
112
117
|
BrushTool,
|
|
118
|
+
OrientationMarkerTool,
|
|
113
119
|
// Synchronizers
|
|
114
120
|
synchronizers,
|
|
115
121
|
Synchronizer,
|
|
@@ -12,8 +12,11 @@ import {
|
|
|
12
12
|
} from '@cornerstonejs/core';
|
|
13
13
|
import type { Types } from '@cornerstonejs/core';
|
|
14
14
|
import { Events } from '../../enums';
|
|
15
|
-
import {
|
|
16
|
-
|
|
15
|
+
import {
|
|
16
|
+
ToolActivatedEventDetail,
|
|
17
|
+
ToolModeChangedEventDetail,
|
|
18
|
+
} from '../../types/EventTypes';
|
|
19
|
+
import { ToolGroupManager, state } from '../index';
|
|
17
20
|
import {
|
|
18
21
|
IToolBinding,
|
|
19
22
|
IToolClassReference,
|
|
@@ -385,6 +388,7 @@ export default class ToolGroup implements IToolGroup {
|
|
|
385
388
|
};
|
|
386
389
|
|
|
387
390
|
triggerEvent(eventTarget, Events.TOOL_ACTIVATED, eventDetail);
|
|
391
|
+
this._triggerToolModeChangedEvent(toolName, Active, toolBindingsOptions);
|
|
388
392
|
}
|
|
389
393
|
|
|
390
394
|
/**
|
|
@@ -440,6 +444,13 @@ export default class ToolGroup implements IToolGroup {
|
|
|
440
444
|
toolInstance.onSetToolPassive();
|
|
441
445
|
}
|
|
442
446
|
this._renderViewports();
|
|
447
|
+
|
|
448
|
+
// It would make sense to use `toolInstance.mode` as mode when setting a tool
|
|
449
|
+
// as passive because it can still be actived in the end but `Passive` must
|
|
450
|
+
// be used when synchronizing ToolGroups so that other ToolGroups can take the
|
|
451
|
+
// same action (update tool bindings). Should the event have two different modes
|
|
452
|
+
// to handle this special case?
|
|
453
|
+
this._triggerToolModeChangedEvent(toolName, Passive);
|
|
443
454
|
}
|
|
444
455
|
|
|
445
456
|
/**
|
|
@@ -473,6 +484,7 @@ export default class ToolGroup implements IToolGroup {
|
|
|
473
484
|
}
|
|
474
485
|
|
|
475
486
|
this._renderViewports();
|
|
487
|
+
this._triggerToolModeChangedEvent(toolName, Enabled);
|
|
476
488
|
}
|
|
477
489
|
|
|
478
490
|
/**
|
|
@@ -505,6 +517,7 @@ export default class ToolGroup implements IToolGroup {
|
|
|
505
517
|
toolInstance.onSetToolDisabled();
|
|
506
518
|
}
|
|
507
519
|
this._renderViewports();
|
|
520
|
+
this._triggerToolModeChangedEvent(toolName, Disabled);
|
|
508
521
|
}
|
|
509
522
|
|
|
510
523
|
/**
|
|
@@ -669,6 +682,49 @@ export default class ToolGroup implements IToolGroup {
|
|
|
669
682
|
return cloneDeep(_configuration);
|
|
670
683
|
}
|
|
671
684
|
|
|
685
|
+
/**
|
|
686
|
+
*
|
|
687
|
+
* @param newToolGroupId - Id of the new (clone) tool group
|
|
688
|
+
* @param fnToolFilter - Function to filter which tools from this tool group
|
|
689
|
+
* should be added to the new (clone) one. Example: only annotations tools
|
|
690
|
+
* can be filtered and added to the new tool group.
|
|
691
|
+
* @returns A new tool group that is a clone of this one
|
|
692
|
+
*/
|
|
693
|
+
public clone(
|
|
694
|
+
newToolGroupId,
|
|
695
|
+
fnToolFilter: (toolName: string) => void = null
|
|
696
|
+
): IToolGroup {
|
|
697
|
+
let toolGroup = ToolGroupManager.getToolGroup(newToolGroupId);
|
|
698
|
+
|
|
699
|
+
if (toolGroup) {
|
|
700
|
+
console.warn(`ToolGroup ${newToolGroupId} already exists`);
|
|
701
|
+
return toolGroup;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
toolGroup = ToolGroupManager.createToolGroup(newToolGroupId);
|
|
705
|
+
fnToolFilter = fnToolFilter ?? (() => true);
|
|
706
|
+
|
|
707
|
+
Object.keys(this._toolInstances)
|
|
708
|
+
.filter(fnToolFilter)
|
|
709
|
+
.forEach((toolName) => {
|
|
710
|
+
const sourceToolInstance = this._toolInstances[toolName];
|
|
711
|
+
const sourceToolOptions = this.toolOptions[toolName];
|
|
712
|
+
const sourceToolMode = sourceToolInstance.mode;
|
|
713
|
+
|
|
714
|
+
toolGroup.addTool(toolName);
|
|
715
|
+
|
|
716
|
+
(toolGroup as unknown as ToolGroup).setToolMode(
|
|
717
|
+
toolName,
|
|
718
|
+
sourceToolMode,
|
|
719
|
+
{
|
|
720
|
+
bindings: sourceToolOptions.bindings ?? [],
|
|
721
|
+
}
|
|
722
|
+
);
|
|
723
|
+
});
|
|
724
|
+
|
|
725
|
+
return toolGroup;
|
|
726
|
+
}
|
|
727
|
+
|
|
672
728
|
/**
|
|
673
729
|
* Check if the tool binding is set to be primary mouse button.
|
|
674
730
|
* @param toolOptions - The options for the tool mode.
|
|
@@ -692,6 +748,27 @@ export default class ToolGroup implements IToolGroup {
|
|
|
692
748
|
getRenderingEngine(renderingEngineId).renderViewport(viewportId);
|
|
693
749
|
});
|
|
694
750
|
}
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Trigger ToolModeChangedEvent when changing the tool mode
|
|
754
|
+
* @param toolName - Tool name
|
|
755
|
+
* @param mode - Tool mode
|
|
756
|
+
* @param toolBindingsOptions - Binding options used when a tool is activated
|
|
757
|
+
*/
|
|
758
|
+
private _triggerToolModeChangedEvent(
|
|
759
|
+
toolName: string,
|
|
760
|
+
mode: ToolModes,
|
|
761
|
+
toolBindingsOptions?: SetToolBindingsType
|
|
762
|
+
): void {
|
|
763
|
+
const eventDetail: ToolModeChangedEventDetail = {
|
|
764
|
+
toolGroupId: this.id,
|
|
765
|
+
toolName,
|
|
766
|
+
mode,
|
|
767
|
+
toolBindingsOptions,
|
|
768
|
+
};
|
|
769
|
+
|
|
770
|
+
triggerEvent(eventTarget, Events.TOOL_MODE_CHANGED, eventDetail);
|
|
771
|
+
}
|
|
695
772
|
}
|
|
696
773
|
|
|
697
774
|
function hasSameBinding(
|
|
@@ -85,7 +85,7 @@ export default async function stackImageSyncCallback(
|
|
|
85
85
|
const frameOfReferenceUID2 = tViewport.getFrameOfReferenceUID();
|
|
86
86
|
if (
|
|
87
87
|
frameOfReferenceUID1 === frameOfReferenceUID2 &&
|
|
88
|
-
options
|
|
88
|
+
options?.useInitialPosition !== false
|
|
89
89
|
) {
|
|
90
90
|
registrationMatrixMat4 = mat4.identity(mat4.create());
|
|
91
91
|
} else {
|