@cornerstonejs/tools 2.0.0-beta.1 → 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/drawCircle.js +9 -5
- package/dist/cjs/drawingSvg/drawCircle.js.map +1 -1
- package/dist/cjs/drawingSvg/drawEllipse.js +4 -4
- package/dist/cjs/drawingSvg/drawEllipse.js.map +1 -1
- package/dist/cjs/drawingSvg/drawHandles.js +4 -4
- package/dist/cjs/drawingSvg/drawHandles.js.map +1 -1
- package/dist/cjs/drawingSvg/drawLine.js +4 -4
- package/dist/cjs/drawingSvg/drawLine.js.map +1 -1
- package/dist/cjs/drawingSvg/drawPolyline.js +4 -4
- package/dist/cjs/drawingSvg/drawPolyline.js.map +1 -1
- package/dist/cjs/drawingSvg/drawRect.js +4 -4
- package/dist/cjs/drawingSvg/drawRect.js.map +1 -1
- package/dist/cjs/drawingSvg/drawTextBox.js +4 -4
- package/dist/cjs/drawingSvg/drawTextBox.js.map +1 -1
- package/dist/cjs/drawingSvg/getSvgDrawingHelper.js +1 -1
- package/dist/cjs/drawingSvg/getSvgDrawingHelper.js.map +1 -1
- package/dist/cjs/drawingSvg/index.d.ts +3 -1
- package/dist/cjs/drawingSvg/index.js +5 -1
- package/dist/cjs/drawingSvg/index.js.map +1 -1
- package/dist/cjs/drawingSvg/setAttributesIfNecessary.d.ts +2 -0
- package/dist/cjs/drawingSvg/{_setAttributesIfNecessary.js → setAttributesIfNecessary.js} +5 -5
- package/dist/cjs/drawingSvg/setAttributesIfNecessary.js.map +1 -0
- package/dist/cjs/drawingSvg/setNewAttributesIfValid.d.ts +2 -0
- package/dist/cjs/drawingSvg/{_setNewAttributesIfValid.js → setNewAttributesIfValid.js} +5 -5
- package/dist/cjs/drawingSvg/setNewAttributesIfValid.js.map +1 -0
- package/dist/cjs/enums/Events.d.ts +2 -0
- package/dist/cjs/enums/Events.js +2 -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/getMouseModifier.js +10 -5
- package/dist/cjs/eventDispatchers/shared/getMouseModifier.js.map +1 -1
- 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/keyboard/keyDownListener.js +8 -0
- package/dist/cjs/eventListeners/keyboard/keyDownListener.js.map +1 -1
- package/dist/cjs/eventListeners/mouse/mouseDownListener.js +7 -2
- 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/eventListeners/touch/touchStartListener.js +10 -5
- package/dist/cjs/eventListeners/touch/touchStartListener.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/stateManagement/annotation/config/ToolStyle.js +1 -0
- package/dist/cjs/stateManagement/annotation/config/ToolStyle.js.map +1 -1
- package/dist/cjs/stateManagement/annotation/config/getState.js +6 -3
- package/dist/cjs/stateManagement/annotation/config/getState.js.map +1 -1
- package/dist/cjs/stateManagement/annotation/config/helpers.js +4 -2
- package/dist/cjs/stateManagement/annotation/config/helpers.js.map +1 -1
- package/dist/cjs/store/SynchronizerManager/Synchronizer.js +10 -2
- package/dist/cjs/store/SynchronizerManager/Synchronizer.js.map +1 -1
- package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +5 -3
- package/dist/cjs/store/ToolGroupManager/ToolGroup.js +44 -2
- package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
- package/dist/cjs/store/ToolGroupManager/getToolGroupsWithToolName.js +2 -1
- package/dist/cjs/store/ToolGroupManager/getToolGroupsWithToolName.js.map +1 -1
- package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js +25 -22
- package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
- package/dist/cjs/synchronizers/callbacks/voiSyncCallback.js +1 -1
- package/dist/cjs/synchronizers/callbacks/voiSyncCallback.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/MIPJumpToClickTool.js +4 -2
- package/dist/cjs/tools/MIPJumpToClickTool.js.map +1 -1
- 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/PlanarRotateTool.js +2 -1
- package/dist/cjs/tools/PlanarRotateTool.js.map +1 -1
- package/dist/cjs/tools/ReferenceCursors.js +58 -29
- package/dist/cjs/tools/ReferenceCursors.js.map +1 -1
- 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/ScaleOverlayTool.js +2 -1
- package/dist/cjs/tools/ScaleOverlayTool.js.map +1 -1
- package/dist/cjs/tools/annotation/AngleTool.d.ts +0 -1
- package/dist/cjs/tools/annotation/AngleTool.js +33 -15
- package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/ArrowAnnotateTool.js +15 -1
- package/dist/cjs/tools/annotation/ArrowAnnotateTool.js.map +1 -1
- package/dist/cjs/tools/annotation/BidirectionalTool.d.ts +0 -1
- package/dist/cjs/tools/annotation/BidirectionalTool.js +30 -15
- package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/cjs/tools/annotation/CircleROITool.d.ts +1 -3
- package/dist/cjs/tools/annotation/CircleROITool.js +63 -60
- package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/CobbAngleTool.d.ts +31 -6
- package/dist/cjs/tools/annotation/CobbAngleTool.js +294 -82
- package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/DragProbeTool.js +17 -4
- package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.d.ts +2 -4
- package/dist/cjs/tools/annotation/EllipticalROITool.js +67 -61
- package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/LengthTool.d.ts +0 -1
- package/dist/cjs/tools/annotation/LengthTool.js +27 -12
- package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +1 -3
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +72 -60
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/ProbeTool.d.ts +1 -3
- package/dist/cjs/tools/annotation/ProbeTool.js +28 -22
- package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/RectangleROITool.d.ts +1 -2
- package/dist/cjs/tools/annotation/RectangleROITool.js +55 -57
- 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 +3 -2
- package/dist/cjs/tools/base/AnnotationTool.js +27 -16
- package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
- package/dist/cjs/tools/base/index.d.ts +2 -1
- package/dist/cjs/tools/base/index.js +3 -1
- package/dist/cjs/tools/base/index.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/displayTools/Labelmap/removeLabelmapFromElement.js +3 -0
- package/dist/cjs/tools/displayTools/Labelmap/removeLabelmapFromElement.js.map +1 -1
- package/dist/cjs/tools/displayTools/SegmentationDisplayTool.js +5 -6
- package/dist/cjs/tools/displayTools/SegmentationDisplayTool.js.map +1 -1
- package/dist/cjs/tools/index.d.ts +5 -2
- package/dist/cjs/tools/index.js +8 -1
- package/dist/cjs/tools/index.js.map +1 -1
- package/dist/cjs/tools/segmentation/BrushTool.js +24 -17
- package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/PaintFillTool.js +4 -2
- package/dist/cjs/tools/segmentation/PaintFillTool.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -0
- package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillCircle.js +5 -7
- package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +3 -0
- package/dist/cjs/tools/segmentation/strategies/fillSphere.js +38 -10
- package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
- package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +3 -0
- package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js +10 -0
- package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -0
- package/dist/cjs/types/CINETypes.d.ts +2 -0
- package/dist/cjs/types/CalculatorTypes.d.ts +6 -0
- package/dist/cjs/types/CalculatorTypes.js +3 -0
- package/dist/cjs/types/CalculatorTypes.js.map +1 -0
- package/dist/cjs/types/EventTypes.d.ts +16 -1
- package/dist/cjs/types/ISetToolModeOptions.d.ts +2 -2
- package/dist/cjs/types/IToolGroup.d.ts +6 -2
- 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/ToolProps.d.ts +5 -1
- package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +55 -0
- package/dist/cjs/types/index.d.ts +4 -2
- package/dist/cjs/utilities/cine/playClip.js +13 -3
- package/dist/cjs/utilities/cine/playClip.js.map +1 -1
- package/dist/cjs/utilities/dynamicVolume/getDataInTime.js +7 -4
- package/dist/cjs/utilities/dynamicVolume/getDataInTime.js.map +1 -1
- package/dist/cjs/utilities/getCalibratedUnits.js +10 -5
- package/dist/cjs/utilities/getCalibratedUnits.js.map +1 -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/math/basic/BasicStatsCalculator.d.ts +14 -0
- package/dist/cjs/utilities/math/basic/BasicStatsCalculator.js +44 -0
- package/dist/cjs/utilities/math/basic/BasicStatsCalculator.js.map +1 -0
- package/dist/cjs/utilities/math/basic/Calculator.d.ts +8 -0
- package/dist/cjs/utilities/math/basic/Calculator.js +6 -0
- package/dist/cjs/utilities/math/basic/Calculator.js.map +1 -0
- package/dist/cjs/utilities/math/basic/index.d.ts +3 -0
- package/dist/cjs/utilities/math/basic/index.js +11 -0
- package/dist/cjs/utilities/math/basic/index.js.map +1 -0
- package/dist/cjs/utilities/math/index.d.ts +2 -1
- package/dist/cjs/utilities/math/index.js +3 -1
- package/dist/cjs/utilities/math/index.js.map +1 -1
- package/dist/cjs/utilities/math/midPoint.js +2 -1
- package/dist/cjs/utilities/math/midPoint.js.map +1 -1
- package/dist/cjs/utilities/math/polyline/pointInPolyline.js +2 -1
- package/dist/cjs/utilities/math/polyline/pointInPolyline.js.map +1 -1
- package/dist/cjs/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
- package/dist/cjs/utilities/math/vec2/liangBarksyClip.js +10 -5
- package/dist/cjs/utilities/math/vec2/liangBarksyClip.js.map +1 -1
- package/dist/cjs/utilities/pointInShapeCallback.d.ts +7 -1
- package/dist/cjs/utilities/pointInShapeCallback.js +6 -1
- package/dist/cjs/utilities/pointInShapeCallback.js.map +1 -1
- package/dist/cjs/utilities/roundNumber.js +4 -2
- package/dist/cjs/utilities/roundNumber.js.map +1 -1
- package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.d.ts +2 -2
- package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.js +4 -4
- package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.js.map +1 -1
- package/dist/cjs/utilities/segmentation/thresholdVolumeByRange.js +2 -1
- package/dist/cjs/utilities/segmentation/thresholdVolumeByRange.js.map +1 -1
- package/dist/cjs/utilities/segmentation/utilities.d.ts +1 -2
- package/dist/cjs/utilities/segmentation/utilities.js +4 -1
- package/dist/cjs/utilities/segmentation/utilities.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 +25 -95
- 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/drawCircle.js +9 -5
- package/dist/esm/drawingSvg/drawCircle.js.map +1 -1
- package/dist/esm/drawingSvg/drawEllipse.js +4 -4
- package/dist/esm/drawingSvg/drawEllipse.js.map +1 -1
- package/dist/esm/drawingSvg/drawHandles.js +4 -4
- package/dist/esm/drawingSvg/drawHandles.js.map +1 -1
- package/dist/esm/drawingSvg/drawLine.js +4 -4
- package/dist/esm/drawingSvg/drawLine.js.map +1 -1
- package/dist/esm/drawingSvg/drawPolyline.js +4 -4
- package/dist/esm/drawingSvg/drawPolyline.js.map +1 -1
- package/dist/esm/drawingSvg/drawRect.js +4 -4
- package/dist/esm/drawingSvg/drawRect.js.map +1 -1
- package/dist/esm/drawingSvg/drawTextBox.js +4 -4
- package/dist/esm/drawingSvg/drawTextBox.js.map +1 -1
- package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
- package/dist/esm/drawingSvg/getSvgDrawingHelper.js.map +1 -1
- package/dist/esm/drawingSvg/index.d.ts +3 -1
- package/dist/esm/drawingSvg/index.js +3 -1
- package/dist/esm/drawingSvg/index.js.map +1 -1
- package/dist/esm/drawingSvg/setAttributesIfNecessary.d.ts +2 -0
- package/dist/esm/drawingSvg/{_setAttributesIfNecessary.js → setAttributesIfNecessary.js} +3 -3
- package/dist/esm/drawingSvg/setAttributesIfNecessary.js.map +1 -0
- package/dist/esm/drawingSvg/setNewAttributesIfValid.d.ts +2 -0
- package/dist/esm/drawingSvg/{_setNewAttributesIfValid.js → setNewAttributesIfValid.js} +3 -3
- package/dist/esm/drawingSvg/setNewAttributesIfValid.js.map +1 -0
- package/dist/esm/enums/Events.d.ts +2 -0
- package/dist/esm/enums/Events.js +2 -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/getMouseModifier.js +10 -5
- package/dist/esm/eventDispatchers/shared/getMouseModifier.js.map +1 -1
- 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/keyboard/keyDownListener.js +8 -0
- package/dist/esm/eventListeners/keyboard/keyDownListener.js.map +1 -1
- package/dist/esm/eventListeners/mouse/mouseDownListener.js +7 -2
- 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/eventListeners/touch/touchStartListener.js +10 -5
- package/dist/esm/eventListeners/touch/touchStartListener.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/stateManagement/annotation/config/ToolStyle.js +1 -0
- package/dist/esm/stateManagement/annotation/config/ToolStyle.js.map +1 -1
- package/dist/esm/stateManagement/annotation/config/getState.js +6 -3
- package/dist/esm/stateManagement/annotation/config/getState.js.map +1 -1
- package/dist/esm/stateManagement/annotation/config/helpers.js +4 -2
- package/dist/esm/stateManagement/annotation/config/helpers.js.map +1 -1
- package/dist/esm/store/SynchronizerManager/Synchronizer.js +10 -2
- package/dist/esm/store/SynchronizerManager/Synchronizer.js.map +1 -1
- package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +5 -3
- package/dist/esm/store/ToolGroupManager/ToolGroup.js +45 -4
- package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
- package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js +2 -1
- package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js.map +1 -1
- package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js +26 -23
- package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
- package/dist/esm/synchronizers/callbacks/voiSyncCallback.js +1 -1
- package/dist/esm/synchronizers/callbacks/voiSyncCallback.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/MIPJumpToClickTool.js +4 -2
- package/dist/esm/tools/MIPJumpToClickTool.js.map +1 -1
- 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/PlanarRotateTool.js +2 -1
- package/dist/esm/tools/PlanarRotateTool.js.map +1 -1
- package/dist/esm/tools/ReferenceCursors.js +58 -29
- package/dist/esm/tools/ReferenceCursors.js.map +1 -1
- 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/ScaleOverlayTool.js +2 -1
- package/dist/esm/tools/ScaleOverlayTool.js.map +1 -1
- package/dist/esm/tools/annotation/AngleTool.d.ts +0 -1
- package/dist/esm/tools/annotation/AngleTool.js +33 -15
- package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/ArrowAnnotateTool.js +15 -1
- package/dist/esm/tools/annotation/ArrowAnnotateTool.js.map +1 -1
- package/dist/esm/tools/annotation/BidirectionalTool.d.ts +0 -1
- package/dist/esm/tools/annotation/BidirectionalTool.js +30 -15
- package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -3
- package/dist/esm/tools/annotation/CircleROITool.js +62 -60
- package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/esm/tools/annotation/CobbAngleTool.d.ts +31 -6
- package/dist/esm/tools/annotation/CobbAngleTool.js +301 -83
- package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/DragProbeTool.js +17 -4
- package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.d.ts +2 -4
- package/dist/esm/tools/annotation/EllipticalROITool.js +66 -61
- package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/esm/tools/annotation/LengthTool.d.ts +0 -1
- package/dist/esm/tools/annotation/LengthTool.js +27 -12
- package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
- package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +1 -3
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +71 -60
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/esm/tools/annotation/ProbeTool.d.ts +1 -3
- package/dist/esm/tools/annotation/ProbeTool.js +28 -22
- package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/RectangleROITool.d.ts +1 -2
- package/dist/esm/tools/annotation/RectangleROITool.js +54 -57
- 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 +3 -2
- package/dist/esm/tools/base/AnnotationTool.js +26 -16
- package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
- package/dist/esm/tools/base/index.d.ts +2 -1
- package/dist/esm/tools/base/index.js +2 -1
- package/dist/esm/tools/base/index.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/displayTools/Labelmap/removeLabelmapFromElement.js +4 -1
- package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js.map +1 -1
- package/dist/esm/tools/displayTools/SegmentationDisplayTool.js +5 -6
- package/dist/esm/tools/displayTools/SegmentationDisplayTool.js.map +1 -1
- package/dist/esm/tools/index.d.ts +5 -2
- package/dist/esm/tools/index.js +5 -2
- package/dist/esm/tools/index.js.map +1 -1
- package/dist/esm/tools/segmentation/BrushTool.js +25 -18
- package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
- package/dist/esm/tools/segmentation/PaintFillTool.js +4 -2
- package/dist/esm/tools/segmentation/PaintFillTool.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/eraseSphere.d.ts +2 -0
- package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillCircle.js +1 -6
- package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/fillSphere.d.ts +3 -0
- package/dist/esm/tools/segmentation/strategies/fillSphere.js +33 -9
- package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
- package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +3 -0
- package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js +8 -0
- package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -0
- package/dist/esm/types/CINETypes.d.ts +2 -0
- package/dist/esm/types/CalculatorTypes.d.ts +6 -0
- package/dist/esm/types/CalculatorTypes.js +2 -0
- package/dist/esm/types/CalculatorTypes.js.map +1 -0
- package/dist/esm/types/EventTypes.d.ts +16 -1
- package/dist/esm/types/ISetToolModeOptions.d.ts +2 -2
- package/dist/esm/types/IToolGroup.d.ts +6 -2
- 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/ToolProps.d.ts +5 -1
- package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +55 -0
- package/dist/esm/types/index.d.ts +4 -2
- package/dist/esm/utilities/cine/playClip.js +13 -4
- package/dist/esm/utilities/cine/playClip.js.map +1 -1
- package/dist/esm/utilities/dynamicVolume/getDataInTime.js +7 -4
- package/dist/esm/utilities/dynamicVolume/getDataInTime.js.map +1 -1
- package/dist/esm/utilities/getCalibratedUnits.js +10 -5
- package/dist/esm/utilities/getCalibratedUnits.js.map +1 -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/math/basic/BasicStatsCalculator.d.ts +14 -0
- package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +36 -0
- package/dist/esm/utilities/math/basic/BasicStatsCalculator.js.map +1 -0
- package/dist/esm/utilities/math/basic/Calculator.d.ts +8 -0
- package/dist/esm/utilities/math/basic/Calculator.js +4 -0
- package/dist/esm/utilities/math/basic/Calculator.js.map +1 -0
- package/dist/esm/utilities/math/basic/index.d.ts +3 -0
- package/dist/esm/utilities/math/basic/index.js +4 -0
- package/dist/esm/utilities/math/basic/index.js.map +1 -0
- package/dist/esm/utilities/math/index.d.ts +2 -1
- package/dist/esm/utilities/math/index.js +2 -1
- package/dist/esm/utilities/math/index.js.map +1 -1
- package/dist/esm/utilities/math/midPoint.js +2 -1
- package/dist/esm/utilities/math/midPoint.js.map +1 -1
- package/dist/esm/utilities/math/polyline/pointInPolyline.js +2 -1
- package/dist/esm/utilities/math/polyline/pointInPolyline.js.map +1 -1
- package/dist/esm/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
- package/dist/esm/utilities/math/vec2/liangBarksyClip.js +10 -5
- package/dist/esm/utilities/math/vec2/liangBarksyClip.js.map +1 -1
- package/dist/esm/utilities/pointInShapeCallback.d.ts +7 -1
- package/dist/esm/utilities/pointInShapeCallback.js +6 -1
- package/dist/esm/utilities/pointInShapeCallback.js.map +1 -1
- package/dist/esm/utilities/roundNumber.js +4 -2
- package/dist/esm/utilities/roundNumber.js.map +1 -1
- package/dist/esm/utilities/segmentation/brushSizeForToolGroup.d.ts +2 -2
- package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js +4 -4
- package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js.map +1 -1
- package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js +2 -1
- package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js.map +1 -1
- package/dist/esm/utilities/segmentation/utilities.d.ts +1 -2
- package/dist/esm/utilities/segmentation/utilities.js +4 -1
- package/dist/esm/utilities/segmentation/utilities.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 +14 -81
- 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/drawCircle.ts +17 -5
- package/src/drawingSvg/drawEllipse.ts +4 -4
- package/src/drawingSvg/drawHandles.ts +4 -4
- package/src/drawingSvg/drawLine.ts +4 -4
- package/src/drawingSvg/drawPolyline.ts +4 -4
- package/src/drawingSvg/drawRect.ts +4 -4
- package/src/drawingSvg/drawTextBox.ts +4 -4
- package/src/drawingSvg/getSvgDrawingHelper.ts +4 -1
- package/src/drawingSvg/index.ts +4 -0
- package/src/drawingSvg/{_setAttributesIfNecessary.ts → setAttributesIfNecessary.ts} +2 -2
- package/src/drawingSvg/{_setNewAttributesIfValid.ts → setNewAttributesIfValid.ts} +2 -2
- package/src/enums/Events.ts +22 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +11 -2
- package/src/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.ts +72 -0
- package/src/eventDispatchers/shared/getMouseModifier.ts +15 -5
- package/src/eventDispatchers/shared/getToolsWithActionsForMouseEvent.ts +66 -0
- package/src/eventListeners/keyboard/keyDownListener.ts +13 -0
- package/src/eventListeners/mouse/mouseDownListener.ts +10 -2
- package/src/eventListeners/mouse/mouseMoveListener.ts +7 -1
- package/src/eventListeners/touch/touchStartListener.ts +15 -5
- package/src/index.ts +8 -0
- package/src/stateManagement/annotation/config/ToolStyle.ts +1 -0
- package/src/stateManagement/annotation/config/getState.ts +7 -3
- package/src/stateManagement/annotation/config/helpers.ts +6 -2
- package/src/store/SynchronizerManager/Synchronizer.ts +16 -8
- package/src/store/ToolGroupManager/ToolGroup.ts +99 -6
- package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +3 -1
- package/src/synchronizers/callbacks/stackImageSyncCallback.ts +63 -68
- package/src/synchronizers/callbacks/voiSyncCallback.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/MIPJumpToClickTool.ts +6 -2
- package/src/tools/MagnifyTool.ts +2 -2
- package/src/tools/OrientationMarkerTool.ts +235 -0
- package/src/tools/OverlayGridTool.ts +357 -0
- package/src/tools/PlanarRotateTool.ts +3 -1
- package/src/tools/ReferenceCursors.ts +85 -29
- package/src/tools/ReferenceLinesTool.ts +131 -3
- package/src/tools/ScaleOverlayTool.ts +3 -1
- package/src/tools/annotation/AngleTool.ts +42 -20
- package/src/tools/annotation/ArrowAnnotateTool.ts +16 -1
- package/src/tools/annotation/BidirectionalTool.ts +38 -24
- package/src/tools/annotation/CircleROITool.ts +94 -107
- package/src/tools/annotation/CobbAngleTool.ts +452 -114
- package/src/tools/annotation/DragProbeTool.ts +25 -14
- package/src/tools/annotation/EllipticalROITool.ts +88 -97
- package/src/tools/annotation/LengthTool.ts +33 -18
- package/src/tools/annotation/PlanarFreehandROITool.ts +90 -78
- package/src/tools/annotation/ProbeTool.ts +43 -49
- package/src/tools/annotation/RectangleROITool.ts +80 -92
- package/src/tools/base/AnnotationDisplayTool.ts +4 -0
- package/src/tools/base/AnnotationTool.ts +41 -18
- package/src/tools/base/index.ts +2 -1
- package/src/tools/displayTools/Contour/contourDisplay.ts +8 -0
- package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +4 -1
- package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +6 -1
- package/src/tools/displayTools/SegmentationDisplayTool.ts +12 -18
- package/src/tools/index.ts +8 -1
- package/src/tools/segmentation/BrushTool.ts +42 -19
- package/src/tools/segmentation/PaintFillTool.ts +10 -3
- package/src/tools/segmentation/strategies/eraseSphere.ts +2 -0
- package/src/tools/segmentation/strategies/fillCircle.ts +1 -13
- package/src/tools/segmentation/strategies/fillSphere.ts +56 -8
- package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +16 -0
- package/src/types/CINETypes.ts +8 -2
- package/src/types/CalculatorTypes.ts +7 -0
- package/src/types/EventTypes.ts +43 -0
- package/src/types/ISetToolModeOptions.ts +2 -2
- package/src/types/IToolGroup.ts +13 -3
- package/src/types/ToolAction.ts +54 -0
- package/src/types/ToolProps.ts +7 -1
- package/src/types/ToolSpecificAnnotationTypes.ts +58 -0
- package/src/types/index.ts +11 -1
- package/src/utilities/cine/playClip.ts +20 -3
- package/src/utilities/dynamicVolume/getDataInTime.ts +9 -6
- package/src/utilities/getCalibratedUnits.ts +15 -5
- 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/math/basic/BasicStatsCalculator.ts +60 -0
- package/src/utilities/math/basic/Calculator.ts +8 -0
- package/src/utilities/math/basic/index.ts +4 -0
- package/src/utilities/math/index.ts +10 -1
- package/src/utilities/math/midPoint.ts +3 -1
- package/src/utilities/math/polyline/pointInPolyline.ts +3 -1
- package/src/utilities/math/vec2/liangBarksyClip.ts +15 -5
- package/src/utilities/pointInShapeCallback.ts +15 -3
- package/src/utilities/roundNumber.ts +6 -2
- package/src/utilities/segmentation/brushSizeForToolGroup.ts +22 -4
- package/src/utilities/segmentation/thresholdVolumeByRange.ts +3 -1
- package/src/utilities/segmentation/utilities.ts +8 -1
- package/src/utilities/stackPrefetch/index.ts +3 -7
- package/src/utilities/stackPrefetch/stackContextPrefetch.ts +380 -0
- package/src/utilities/stackPrefetch/stackPrefetch.ts +37 -153
- package/src/utilities/stackPrefetch/stackPrefetchUtils.ts +114 -0
- package/dist/cjs/drawingSvg/_setAttributesIfNecessary.d.ts +0 -2
- package/dist/cjs/drawingSvg/_setAttributesIfNecessary.js.map +0 -1
- package/dist/cjs/drawingSvg/_setNewAttributesIfValid.d.ts +0 -2
- package/dist/cjs/drawingSvg/_setNewAttributesIfValid.js.map +0 -1
- package/dist/esm/drawingSvg/_setAttributesIfNecessary.d.ts +0 -2
- package/dist/esm/drawingSvg/_setAttributesIfNecessary.js.map +0 -1
- package/dist/esm/drawingSvg/_setNewAttributesIfValid.d.ts +0 -2
- package/dist/esm/drawingSvg/_setNewAttributesIfValid.js.map +0 -1
|
@@ -45,7 +45,6 @@ import {
|
|
|
45
45
|
TextBoxHandle,
|
|
46
46
|
ToolProps,
|
|
47
47
|
PublicToolProps,
|
|
48
|
-
InteractionTypes,
|
|
49
48
|
SVGDrawingHelper,
|
|
50
49
|
} from '../../types';
|
|
51
50
|
import { RectangleROIAnnotation } from '../../types/ToolSpecificAnnotationTypes';
|
|
@@ -56,6 +55,8 @@ import {
|
|
|
56
55
|
import { StyleSpecifier } from '../../types/AnnotationStyle';
|
|
57
56
|
import { getModalityUnit } from '../../utilities/getModalityUnit';
|
|
58
57
|
import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
|
|
58
|
+
import { pointInShapeCallback } from '../../utilities/';
|
|
59
|
+
import { BasicStatsCalculator } from '../../utilities/math/basic';
|
|
59
60
|
|
|
60
61
|
const { transformWorldToIndex } = csUtils;
|
|
61
62
|
|
|
@@ -97,6 +98,7 @@ const { transformWorldToIndex } = csUtils;
|
|
|
97
98
|
*
|
|
98
99
|
* Read more in the Docs section of the website.
|
|
99
100
|
*/
|
|
101
|
+
|
|
100
102
|
class RectangleROITool extends AnnotationTool {
|
|
101
103
|
static toolName;
|
|
102
104
|
|
|
@@ -119,6 +121,8 @@ class RectangleROITool extends AnnotationTool {
|
|
|
119
121
|
configuration: {
|
|
120
122
|
shadow: true,
|
|
121
123
|
preventHandleOutsideImage: false,
|
|
124
|
+
getTextLines: defaultGetTextLines,
|
|
125
|
+
statsCalculator: BasicStatsCalculator,
|
|
122
126
|
},
|
|
123
127
|
}
|
|
124
128
|
) {
|
|
@@ -654,21 +658,11 @@ class RectangleROITool extends AnnotationTool {
|
|
|
654
658
|
|
|
655
659
|
const { viewPlaneNormal, viewUp } = viewport.getCamera();
|
|
656
660
|
|
|
657
|
-
const modalityUnitOptions = {
|
|
658
|
-
isPreScaled: isViewportPreScaled(viewport, targetId),
|
|
659
|
-
|
|
660
|
-
isSuvScaled: this.isSuvScaled(
|
|
661
|
-
viewport,
|
|
662
|
-
targetId,
|
|
663
|
-
annotation.metadata.referencedImageId
|
|
664
|
-
),
|
|
665
|
-
};
|
|
666
|
-
|
|
667
661
|
// If cachedStats does not exist, or the unit is missing (as part of import/hydration etc.),
|
|
668
662
|
// force to recalculate the stats from the points
|
|
669
663
|
if (
|
|
670
664
|
!data.cachedStats[targetId] ||
|
|
671
|
-
data.cachedStats[targetId].areaUnit
|
|
665
|
+
data.cachedStats[targetId].areaUnit == null
|
|
672
666
|
) {
|
|
673
667
|
data.cachedStats[targetId] = {
|
|
674
668
|
Modality: null,
|
|
@@ -684,8 +678,7 @@ class RectangleROITool extends AnnotationTool {
|
|
|
684
678
|
viewPlaneNormal,
|
|
685
679
|
viewUp,
|
|
686
680
|
renderingEngine,
|
|
687
|
-
enabledElement
|
|
688
|
-
modalityUnitOptions
|
|
681
|
+
enabledElement
|
|
689
682
|
);
|
|
690
683
|
} else if (annotation.invalidated) {
|
|
691
684
|
this._throttledCalculateCachedStats(
|
|
@@ -693,8 +686,7 @@ class RectangleROITool extends AnnotationTool {
|
|
|
693
686
|
viewPlaneNormal,
|
|
694
687
|
viewUp,
|
|
695
688
|
renderingEngine,
|
|
696
|
-
enabledElement
|
|
697
|
-
modalityUnitOptions
|
|
689
|
+
enabledElement
|
|
698
690
|
);
|
|
699
691
|
|
|
700
692
|
// If the invalidated data is as a result of volumeViewport manipulation
|
|
@@ -786,7 +778,22 @@ class RectangleROITool extends AnnotationTool {
|
|
|
786
778
|
|
|
787
779
|
renderStatus = true;
|
|
788
780
|
|
|
789
|
-
const
|
|
781
|
+
const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
|
|
782
|
+
if (!options.visibility) {
|
|
783
|
+
data.handles.textBox = {
|
|
784
|
+
hasMoved: false,
|
|
785
|
+
worldPosition: <Types.Point3>[0, 0, 0],
|
|
786
|
+
worldBoundingBox: {
|
|
787
|
+
topLeft: <Types.Point3>[0, 0, 0],
|
|
788
|
+
topRight: <Types.Point3>[0, 0, 0],
|
|
789
|
+
bottomLeft: <Types.Point3>[0, 0, 0],
|
|
790
|
+
bottomRight: <Types.Point3>[0, 0, 0],
|
|
791
|
+
},
|
|
792
|
+
};
|
|
793
|
+
continue;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
const textLines = this.configuration.getTextLines(data, targetId);
|
|
790
797
|
if (!textLines || textLines.length === 0) {
|
|
791
798
|
continue;
|
|
792
799
|
}
|
|
@@ -811,7 +818,7 @@ class RectangleROITool extends AnnotationTool {
|
|
|
811
818
|
textBoxPosition,
|
|
812
819
|
canvasCoordinates,
|
|
813
820
|
{},
|
|
814
|
-
|
|
821
|
+
options
|
|
815
822
|
);
|
|
816
823
|
|
|
817
824
|
const { x: left, y: top, width, height } = boundingBox;
|
|
@@ -845,33 +852,6 @@ class RectangleROITool extends AnnotationTool {
|
|
|
845
852
|
};
|
|
846
853
|
};
|
|
847
854
|
|
|
848
|
-
/**
|
|
849
|
-
* _getTextLines - Returns the Area, mean and std deviation of the area of the
|
|
850
|
-
* target volume enclosed by the rectangle.
|
|
851
|
-
*
|
|
852
|
-
* @param data - The annotation tool-specific data.
|
|
853
|
-
* @param targetId - The volumeId of the volume to display the stats for.
|
|
854
|
-
* @param isPreScaled - Whether the viewport is pre-scaled or not.
|
|
855
|
-
*/
|
|
856
|
-
_getTextLines = (data, targetId: string): string[] | undefined => {
|
|
857
|
-
const cachedVolumeStats = data.cachedStats[targetId];
|
|
858
|
-
const { area, mean, max, stdDev, areaUnit, modalityUnit } =
|
|
859
|
-
cachedVolumeStats;
|
|
860
|
-
|
|
861
|
-
if (mean === undefined) {
|
|
862
|
-
return;
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
const textLines: string[] = [];
|
|
866
|
-
|
|
867
|
-
textLines.push(`Area: ${roundNumber(area)} ${areaUnit}`);
|
|
868
|
-
textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
|
|
869
|
-
textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
|
|
870
|
-
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
|
|
871
|
-
|
|
872
|
-
return textLines;
|
|
873
|
-
};
|
|
874
|
-
|
|
875
855
|
/**
|
|
876
856
|
* _calculateCachedStats - For each volume in the frame of reference that a
|
|
877
857
|
* tool instance in particular viewport defines as its target volume, find the
|
|
@@ -888,11 +868,10 @@ class RectangleROITool extends AnnotationTool {
|
|
|
888
868
|
viewPlaneNormal,
|
|
889
869
|
viewUp,
|
|
890
870
|
renderingEngine,
|
|
891
|
-
enabledElement
|
|
892
|
-
modalityUnitOptions
|
|
871
|
+
enabledElement
|
|
893
872
|
) => {
|
|
894
873
|
const { data } = annotation;
|
|
895
|
-
const { viewportId, renderingEngineId } = enabledElement;
|
|
874
|
+
const { viewportId, renderingEngineId, viewport } = enabledElement;
|
|
896
875
|
|
|
897
876
|
const worldPos1 = data.handles.points[0];
|
|
898
877
|
const worldPos2 = data.handles.points[3];
|
|
@@ -945,6 +924,12 @@ class RectangleROITool extends AnnotationTool {
|
|
|
945
924
|
const kMin = Math.min(worldPos1Index[2], worldPos2Index[2]);
|
|
946
925
|
const kMax = Math.max(worldPos1Index[2], worldPos2Index[2]);
|
|
947
926
|
|
|
927
|
+
const boundsIJK = [
|
|
928
|
+
[iMin, iMax],
|
|
929
|
+
[jMin, jMax],
|
|
930
|
+
[kMin, kMax],
|
|
931
|
+
] as [Types.Point2, Types.Point2, Types.Point2];
|
|
932
|
+
|
|
948
933
|
const { worldWidth, worldHeight } = getWorldWidthAndHeightFromCorners(
|
|
949
934
|
viewPlaneNormal,
|
|
950
935
|
viewUp,
|
|
@@ -955,48 +940,15 @@ class RectangleROITool extends AnnotationTool {
|
|
|
955
940
|
|
|
956
941
|
const area = Math.abs(worldWidth * worldHeight) / (scale * scale);
|
|
957
942
|
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
let stdDev = 0;
|
|
961
|
-
let max = -Infinity;
|
|
943
|
+
const modalityUnitOptions = {
|
|
944
|
+
isPreScaled: isViewportPreScaled(viewport, targetId),
|
|
962
945
|
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
for (let k = kMin; k <= kMax; k++) {
|
|
970
|
-
for (let j = jMin; j <= jMax; j++) {
|
|
971
|
-
for (let i = iMin; i <= iMax; i++) {
|
|
972
|
-
const value = scalarData[k * zMultiple + j * yMultiple + i];
|
|
973
|
-
|
|
974
|
-
if (value > max) {
|
|
975
|
-
max = value;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
count++;
|
|
979
|
-
mean += value;
|
|
980
|
-
}
|
|
981
|
-
}
|
|
982
|
-
}
|
|
983
|
-
|
|
984
|
-
mean /= count;
|
|
985
|
-
|
|
986
|
-
for (let k = kMin; k <= kMax; k++) {
|
|
987
|
-
for (let j = jMin; j <= jMax; j++) {
|
|
988
|
-
for (let i = iMin; i <= iMax; i++) {
|
|
989
|
-
const value = scalarData[k * zMultiple + j * yMultiple + i];
|
|
990
|
-
|
|
991
|
-
const valueMinusMean = value - mean;
|
|
992
|
-
|
|
993
|
-
stdDev += valueMinusMean * valueMinusMean;
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
}
|
|
997
|
-
|
|
998
|
-
stdDev /= count;
|
|
999
|
-
stdDev = Math.sqrt(stdDev);
|
|
946
|
+
isSuvScaled: this.isSuvScaled(
|
|
947
|
+
viewport,
|
|
948
|
+
targetId,
|
|
949
|
+
annotation.metadata.referencedImageId
|
|
950
|
+
),
|
|
951
|
+
};
|
|
1000
952
|
|
|
1001
953
|
const modalityUnit = getModalityUnit(
|
|
1002
954
|
metadata.Modality,
|
|
@@ -1004,12 +956,23 @@ class RectangleROITool extends AnnotationTool {
|
|
|
1004
956
|
modalityUnitOptions
|
|
1005
957
|
);
|
|
1006
958
|
|
|
959
|
+
const pointsInShape = pointInShapeCallback(
|
|
960
|
+
imageData,
|
|
961
|
+
() => true,
|
|
962
|
+
this.configuration.statsCalculator.statsCallback,
|
|
963
|
+
boundsIJK
|
|
964
|
+
);
|
|
965
|
+
|
|
966
|
+
const stats = this.configuration.statsCalculator.getStatistics();
|
|
967
|
+
|
|
1007
968
|
cachedStats[targetId] = {
|
|
1008
969
|
Modality: metadata.Modality,
|
|
1009
970
|
area,
|
|
1010
|
-
mean,
|
|
1011
|
-
stdDev,
|
|
1012
|
-
max,
|
|
971
|
+
mean: stats[1]?.value,
|
|
972
|
+
stdDev: stats[2]?.value,
|
|
973
|
+
max: stats[0]?.value,
|
|
974
|
+
statsArray: stats,
|
|
975
|
+
pointsInShape: pointsInShape,
|
|
1013
976
|
areaUnit: getCalibratedAreaUnits(null, image),
|
|
1014
977
|
modalityUnit,
|
|
1015
978
|
};
|
|
@@ -1044,5 +1007,30 @@ class RectangleROITool extends AnnotationTool {
|
|
|
1044
1007
|
};
|
|
1045
1008
|
}
|
|
1046
1009
|
|
|
1010
|
+
/**
|
|
1011
|
+
* _getTextLines - Returns the Area, mean and std deviation of the area of the
|
|
1012
|
+
* target volume enclosed by the rectangle.
|
|
1013
|
+
*
|
|
1014
|
+
* @param data - The annotation tool-specific data.
|
|
1015
|
+
* @param targetId - The volumeId of the volume to display the stats for.
|
|
1016
|
+
*/
|
|
1017
|
+
function defaultGetTextLines(data, targetId: string): string[] {
|
|
1018
|
+
const cachedVolumeStats = data.cachedStats[targetId];
|
|
1019
|
+
const { area, mean, max, stdDev, areaUnit, modalityUnit } = cachedVolumeStats;
|
|
1020
|
+
|
|
1021
|
+
if (mean === undefined) {
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
const textLines: string[] = [];
|
|
1026
|
+
|
|
1027
|
+
textLines.push(`Area: ${roundNumber(area)} ${areaUnit}`);
|
|
1028
|
+
textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
|
|
1029
|
+
textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
|
|
1030
|
+
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
|
|
1031
|
+
|
|
1032
|
+
return textLines;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1047
1035
|
RectangleROITool.toolName = 'RectangleROI';
|
|
1048
1036
|
export default RectangleROITool;
|
|
@@ -102,6 +102,10 @@ abstract class AnnotationDisplayTool extends BaseTool {
|
|
|
102
102
|
|
|
103
103
|
// for this specific tool
|
|
104
104
|
toolSpecificAnnotations.forEach((annotation) => {
|
|
105
|
+
if (!annotation.metadata?.referencedImageId) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
105
109
|
// if the annotation is drawn on the same imageId
|
|
106
110
|
const referencedImageURI = utilities.imageIdToURI(
|
|
107
111
|
annotation.metadata.referencedImageId
|
|
@@ -18,10 +18,12 @@ import {
|
|
|
18
18
|
EventTypes,
|
|
19
19
|
ToolHandle,
|
|
20
20
|
InteractionTypes,
|
|
21
|
+
ToolProps,
|
|
22
|
+
PublicToolProps,
|
|
21
23
|
} from '../../types';
|
|
22
24
|
import { StyleSpecifier } from '../../types/AnnotationStyle';
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
/**-q
|
|
25
27
|
* Abstract class for tools which create and display annotations on the
|
|
26
28
|
* cornerstone3D canvas. In addition, it provides a base class for segmentation
|
|
27
29
|
* tools that require drawing an annotation before running the segmentation strategy
|
|
@@ -37,6 +39,19 @@ abstract class AnnotationTool extends AnnotationDisplayTool {
|
|
|
37
39
|
// Abstract Methods - Must be implemented.
|
|
38
40
|
// ===================================================================
|
|
39
41
|
|
|
42
|
+
constructor(toolProps: PublicToolProps, defaultToolProps: ToolProps) {
|
|
43
|
+
super(toolProps, defaultToolProps);
|
|
44
|
+
|
|
45
|
+
if (toolProps.configuration?.getTextLines) {
|
|
46
|
+
this.configuration.getTextLines = toolProps.configuration.getTextLines;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (toolProps.configuration?.statsCalculator) {
|
|
50
|
+
this.configuration.statsCalculator =
|
|
51
|
+
toolProps.configuration.statsCalculator;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
40
55
|
/**
|
|
41
56
|
* @abstract addNewAnnotation Creates a new annotation based on the clicked mouse position
|
|
42
57
|
*
|
|
@@ -79,7 +94,8 @@ abstract class AnnotationTool extends AnnotationDisplayTool {
|
|
|
79
94
|
abstract toolSelectedCallback(
|
|
80
95
|
evt: EventTypes.InteractionEventType,
|
|
81
96
|
annotation: Annotation,
|
|
82
|
-
interactionType: InteractionTypes
|
|
97
|
+
interactionType: InteractionTypes,
|
|
98
|
+
canvasCoords?: Types.Point2
|
|
83
99
|
): void;
|
|
84
100
|
|
|
85
101
|
/**
|
|
@@ -185,24 +201,26 @@ abstract class AnnotationTool extends AnnotationDisplayTool {
|
|
|
185
201
|
|
|
186
202
|
const { data } = annotation;
|
|
187
203
|
const { points, textBox } = data.handles;
|
|
188
|
-
const { worldBoundingBox } = textBox;
|
|
189
204
|
|
|
190
|
-
if (
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
205
|
+
if (textBox) {
|
|
206
|
+
const { worldBoundingBox } = textBox;
|
|
207
|
+
if (worldBoundingBox) {
|
|
208
|
+
const canvasBoundingBox = {
|
|
209
|
+
topLeft: viewport.worldToCanvas(worldBoundingBox.topLeft),
|
|
210
|
+
topRight: viewport.worldToCanvas(worldBoundingBox.topRight),
|
|
211
|
+
bottomLeft: viewport.worldToCanvas(worldBoundingBox.bottomLeft),
|
|
212
|
+
bottomRight: viewport.worldToCanvas(worldBoundingBox.bottomRight),
|
|
213
|
+
};
|
|
197
214
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
215
|
+
if (
|
|
216
|
+
canvasCoords[0] >= canvasBoundingBox.topLeft[0] &&
|
|
217
|
+
canvasCoords[0] <= canvasBoundingBox.bottomRight[0] &&
|
|
218
|
+
canvasCoords[1] >= canvasBoundingBox.topLeft[1] &&
|
|
219
|
+
canvasCoords[1] <= canvasBoundingBox.bottomRight[1]
|
|
220
|
+
) {
|
|
221
|
+
data.handles.activeHandleIndex = null;
|
|
222
|
+
return textBox;
|
|
223
|
+
}
|
|
206
224
|
}
|
|
207
225
|
}
|
|
208
226
|
|
|
@@ -240,6 +258,11 @@ abstract class AnnotationTool extends AnnotationDisplayTool {
|
|
|
240
258
|
// for the textBox.
|
|
241
259
|
|
|
242
260
|
return {
|
|
261
|
+
visibility: this.getStyle(
|
|
262
|
+
'textBoxVisibility',
|
|
263
|
+
specifications,
|
|
264
|
+
annotation
|
|
265
|
+
),
|
|
243
266
|
fontFamily: this.getStyle(
|
|
244
267
|
'textBoxFontFamily',
|
|
245
268
|
specifications,
|
package/src/tools/base/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
getEnabledElementByIds,
|
|
3
3
|
Types,
|
|
4
4
|
utilities as csUtils,
|
|
5
|
+
StackViewport,
|
|
5
6
|
} from '@cornerstonejs/core';
|
|
6
7
|
|
|
7
8
|
import Representations from '../../../enums/SegmentationRepresentations';
|
|
@@ -128,6 +129,13 @@ async function render(
|
|
|
128
129
|
const contourData = segmentation.representationData[Representations.Contour];
|
|
129
130
|
const { geometryIds } = contourData;
|
|
130
131
|
|
|
132
|
+
|
|
133
|
+
// We don't have a good way to handle stack viewports for contours at the moment.
|
|
134
|
+
// Plus, if we add a segmentation to one viewport, it gets added to all the viewports in the toolGroup too.
|
|
135
|
+
if (viewport instanceof StackViewport) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
131
139
|
if (!geometryIds?.length) {
|
|
132
140
|
console.warn(
|
|
133
141
|
`No contours found for segmentationId ${segmentationId}. Skipping render.`
|
|
@@ -276,6 +276,9 @@ function _setLabelmapColorAndOpacity(
|
|
|
276
276
|
isActiveLabelmap
|
|
277
277
|
);
|
|
278
278
|
|
|
279
|
+
// Todo: the below loop probably can be optimized so that we don't hit it
|
|
280
|
+
// unless a config has changed. Right now we get into the following loop
|
|
281
|
+
// even for brush drawing which does not makes sense
|
|
279
282
|
for (let i = 0; i < numColors; i++) {
|
|
280
283
|
const segmentIndex = i;
|
|
281
284
|
const segmentColor = colorLUT[segmentIndex];
|
|
@@ -413,7 +416,7 @@ function _needsTransferFunctionUpdate(
|
|
|
413
416
|
renderFill,
|
|
414
417
|
renderOutline,
|
|
415
418
|
outlineWidth,
|
|
416
|
-
segmentColor,
|
|
419
|
+
segmentColor: segmentColor.slice(), // Create a copy
|
|
417
420
|
segmentsHidden: new Set(segmentsHidden), // Create a copy
|
|
418
421
|
});
|
|
419
422
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getEnabledElement } from '@cornerstonejs/core';
|
|
1
|
+
import { StackViewport, getEnabledElement } from '@cornerstonejs/core';
|
|
2
2
|
import type { Types } from '@cornerstonejs/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -19,6 +19,11 @@ function removeLabelmapFromElement(
|
|
|
19
19
|
const enabledElement = getEnabledElement(element);
|
|
20
20
|
const { viewport } = enabledElement;
|
|
21
21
|
|
|
22
|
+
if (viewport instanceof StackViewport) {
|
|
23
|
+
// Todo: we don't have stack segmentation yet
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
22
27
|
(viewport as Types.IVolumeViewport).removeVolumeActors([
|
|
23
28
|
segmentationRepresentationUID,
|
|
24
29
|
]);
|
|
@@ -143,26 +143,20 @@ class SegmentationDisplayTool extends BaseTool {
|
|
|
143
143
|
const config = this._getMergedRepresentationsConfig(toolGroupId);
|
|
144
144
|
|
|
145
145
|
const viewportsRenderList = [];
|
|
146
|
+
const display =
|
|
147
|
+
representation.type === Representations.Labelmap
|
|
148
|
+
? labelmapDisplay
|
|
149
|
+
: contourDisplay;
|
|
150
|
+
|
|
146
151
|
for (const viewport of toolGroupViewports) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
config
|
|
153
|
-
)
|
|
154
|
-
);
|
|
155
|
-
} else if (representation.type == Representations.Contour) {
|
|
156
|
-
viewportsRenderList.push(
|
|
157
|
-
contourDisplay.render(
|
|
158
|
-
viewport as Types.IVolumeViewport,
|
|
159
|
-
representation,
|
|
160
|
-
config
|
|
161
|
-
)
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
152
|
+
const renderedViewport = display.render(
|
|
153
|
+
viewport as Types.IVolumeViewport,
|
|
154
|
+
representation,
|
|
155
|
+
config
|
|
156
|
+
);
|
|
165
157
|
|
|
158
|
+
viewportsRenderList.push(renderedViewport);
|
|
159
|
+
}
|
|
166
160
|
return viewportsRenderList;
|
|
167
161
|
}
|
|
168
162
|
);
|
package/src/tools/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseTool, AnnotationTool } from './base';
|
|
1
|
+
import { BaseTool, AnnotationTool, AnnotationDisplayTool } from './base';
|
|
2
2
|
import PanTool from './PanTool';
|
|
3
3
|
import TrackballRotateTool from './TrackballRotateTool';
|
|
4
4
|
import WindowLevelTool from './WindowLevelTool';
|
|
@@ -10,7 +10,9 @@ import VolumeRotateMouseWheelTool from './VolumeRotateMouseWheelTool';
|
|
|
10
10
|
import MIPJumpToClickTool from './MIPJumpToClickTool';
|
|
11
11
|
import CrosshairsTool from './CrosshairsTool';
|
|
12
12
|
import MagnifyTool from './MagnifyTool';
|
|
13
|
+
import AdvancedMagnifyTool from './AdvancedMagnifyTool';
|
|
13
14
|
import ReferenceLinesTool from './ReferenceLinesTool';
|
|
15
|
+
import OverlayGridTool from './OverlayGridTool';
|
|
14
16
|
//
|
|
15
17
|
import BidirectionalTool from './annotation/BidirectionalTool';
|
|
16
18
|
import LengthTool from './annotation/LengthTool';
|
|
@@ -38,11 +40,13 @@ import RectangleROIThresholdTool from './segmentation/RectangleROIThresholdTool'
|
|
|
38
40
|
import RectangleROIStartEndThresholdTool from './segmentation/RectangleROIStartEndThresholdTool';
|
|
39
41
|
import BrushTool from './segmentation/BrushTool';
|
|
40
42
|
import PaintFillTool from './segmentation/PaintFillTool';
|
|
43
|
+
import OrientationMarkerTool from './OrientationMarkerTool';
|
|
41
44
|
|
|
42
45
|
export {
|
|
43
46
|
// ~~ BASE
|
|
44
47
|
BaseTool,
|
|
45
48
|
AnnotationTool,
|
|
49
|
+
AnnotationDisplayTool,
|
|
46
50
|
// Manipulation Tools
|
|
47
51
|
PanTool,
|
|
48
52
|
TrackballRotateTool,
|
|
@@ -57,6 +61,7 @@ export {
|
|
|
57
61
|
// Annotation Tools
|
|
58
62
|
CrosshairsTool,
|
|
59
63
|
ReferenceLinesTool,
|
|
64
|
+
OverlayGridTool,
|
|
60
65
|
BidirectionalTool,
|
|
61
66
|
LengthTool,
|
|
62
67
|
ProbeTool,
|
|
@@ -78,7 +83,9 @@ export {
|
|
|
78
83
|
RectangleROIStartEndThresholdTool,
|
|
79
84
|
BrushTool,
|
|
80
85
|
MagnifyTool,
|
|
86
|
+
AdvancedMagnifyTool,
|
|
81
87
|
ReferenceLines,
|
|
82
88
|
PaintFillTool,
|
|
83
89
|
ScaleOverlayTool,
|
|
90
|
+
OrientationMarkerTool,
|
|
84
91
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cache, getEnabledElement, StackViewport } from '@cornerstonejs/core';
|
|
2
|
+
import { vec3 } from 'gl-matrix';
|
|
2
3
|
|
|
3
4
|
import type { Types } from '@cornerstonejs/core';
|
|
4
5
|
import type {
|
|
@@ -8,7 +9,10 @@ import type {
|
|
|
8
9
|
SVGDrawingHelper,
|
|
9
10
|
} from '../../types';
|
|
10
11
|
import { BaseTool } from '../base';
|
|
11
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
fillInsideSphere,
|
|
14
|
+
thresholdInsideSphere,
|
|
15
|
+
} from './strategies/fillSphere';
|
|
12
16
|
import { eraseInsideSphere } from './strategies/eraseSphere';
|
|
13
17
|
import {
|
|
14
18
|
thresholdInsideCircle,
|
|
@@ -59,10 +63,11 @@ class BrushTool extends BaseTool {
|
|
|
59
63
|
configuration: {
|
|
60
64
|
strategies: {
|
|
61
65
|
FILL_INSIDE_CIRCLE: fillInsideCircle,
|
|
62
|
-
THRESHOLD_INSIDE_CIRCLE: thresholdInsideCircle,
|
|
63
66
|
ERASE_INSIDE_CIRCLE: eraseInsideCircle,
|
|
64
67
|
FILL_INSIDE_SPHERE: fillInsideSphere,
|
|
65
68
|
ERASE_INSIDE_SPHERE: eraseInsideSphere,
|
|
69
|
+
THRESHOLD_INSIDE_CIRCLE: thresholdInsideCircle,
|
|
70
|
+
THRESHOLD_INSIDE_SPHERE: thresholdInsideSphere,
|
|
66
71
|
},
|
|
67
72
|
strategySpecificConfiguration: {
|
|
68
73
|
THRESHOLD_INSIDE_CIRCLE: {
|
|
@@ -277,24 +282,42 @@ class BrushTool extends BaseTool {
|
|
|
277
282
|
const enabledElement = getEnabledElement(element);
|
|
278
283
|
const { viewport } = enabledElement;
|
|
279
284
|
const { canvasToWorld } = viewport;
|
|
285
|
+
const camera = viewport.getCamera();
|
|
280
286
|
const { brushSize } = this.configuration;
|
|
281
|
-
// Center of circle in canvas Coordinates
|
|
282
287
|
|
|
283
|
-
const
|
|
288
|
+
const viewUp = vec3.fromValues(
|
|
289
|
+
camera.viewUp[0],
|
|
290
|
+
camera.viewUp[1],
|
|
291
|
+
camera.viewUp[2]
|
|
292
|
+
);
|
|
293
|
+
const viewPlaneNormal = vec3.fromValues(
|
|
294
|
+
camera.viewPlaneNormal[0],
|
|
295
|
+
camera.viewPlaneNormal[1],
|
|
296
|
+
camera.viewPlaneNormal[2]
|
|
297
|
+
);
|
|
298
|
+
const viewRight = vec3.create();
|
|
284
299
|
|
|
285
|
-
|
|
300
|
+
vec3.cross(viewRight, viewUp, viewPlaneNormal);
|
|
301
|
+
|
|
302
|
+
// in the world coordinate system, the brushSize is the radius of the circle
|
|
303
|
+
// in mm
|
|
304
|
+
const centerCursorInWorld: Types.Point3 = canvasToWorld([
|
|
286
305
|
centerCanvas[0],
|
|
287
|
-
centerCanvas[1] + radius,
|
|
288
|
-
];
|
|
289
|
-
const topCanvas: Types.Point2 = [centerCanvas[0], centerCanvas[1] - radius];
|
|
290
|
-
const leftCanvas: Types.Point2 = [
|
|
291
|
-
centerCanvas[0] - radius,
|
|
292
|
-
centerCanvas[1],
|
|
293
|
-
];
|
|
294
|
-
const rightCanvas: Types.Point2 = [
|
|
295
|
-
centerCanvas[0] + radius,
|
|
296
306
|
centerCanvas[1],
|
|
297
|
-
];
|
|
307
|
+
]);
|
|
308
|
+
|
|
309
|
+
const bottomCursorInWorld = vec3.create();
|
|
310
|
+
const topCursorInWorld = vec3.create();
|
|
311
|
+
const leftCursorInWorld = vec3.create();
|
|
312
|
+
const rightCursorInWorld = vec3.create();
|
|
313
|
+
|
|
314
|
+
// Calculate the bottom and top points of the circle in world coordinates
|
|
315
|
+
for (let i = 0; i <= 2; i++) {
|
|
316
|
+
bottomCursorInWorld[i] = centerCursorInWorld[i] - viewUp[i] * brushSize;
|
|
317
|
+
topCursorInWorld[i] = centerCursorInWorld[i] + viewUp[i] * brushSize;
|
|
318
|
+
leftCursorInWorld[i] = centerCursorInWorld[i] - viewRight[i] * brushSize;
|
|
319
|
+
rightCursorInWorld[i] = centerCursorInWorld[i] + viewRight[i] * brushSize;
|
|
320
|
+
}
|
|
298
321
|
|
|
299
322
|
const { brushCursor } = this._hoverData;
|
|
300
323
|
const { data } = brushCursor;
|
|
@@ -304,10 +327,10 @@ class BrushTool extends BaseTool {
|
|
|
304
327
|
}
|
|
305
328
|
|
|
306
329
|
data.handles.points = [
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
330
|
+
bottomCursorInWorld,
|
|
331
|
+
topCursorInWorld,
|
|
332
|
+
leftCursorInWorld,
|
|
333
|
+
rightCursorInWorld,
|
|
311
334
|
];
|
|
312
335
|
|
|
313
336
|
data.invalidated = false;
|
|
@@ -90,7 +90,10 @@ class PaintFillTool extends BaseTool {
|
|
|
90
90
|
|
|
91
91
|
const index = transformWorldToIndex(segmentation.imageData, worldPos);
|
|
92
92
|
|
|
93
|
-
const fixedDimension = this.getFixedDimension(
|
|
93
|
+
const fixedDimension = this.getFixedDimension(
|
|
94
|
+
viewPlaneNormal,
|
|
95
|
+
direction as number[]
|
|
96
|
+
);
|
|
94
97
|
|
|
95
98
|
if (fixedDimension === undefined) {
|
|
96
99
|
console.warn('Oblique paint fill not yet supported');
|
|
@@ -169,8 +172,12 @@ class PaintFillTool extends BaseTool {
|
|
|
169
172
|
for (let b = 0; b < boundaries.length; b++) {
|
|
170
173
|
const j = boundaries[b][1];
|
|
171
174
|
|
|
172
|
-
if (j < minJ)
|
|
173
|
-
|
|
175
|
+
if (j < minJ) {
|
|
176
|
+
minJ = j;
|
|
177
|
+
}
|
|
178
|
+
if (j > maxJ) {
|
|
179
|
+
maxJ = j;
|
|
180
|
+
}
|
|
174
181
|
}
|
|
175
182
|
|
|
176
183
|
const framesModified = [];
|