@cornerstonejs/tools 2.0.0-beta.1 → 2.0.0-beta.2
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/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 +1 -0
- package/dist/cjs/enums/Events.js +1 -0
- package/dist/cjs/enums/Events.js.map +1 -1
- package/dist/cjs/eventDispatchers/shared/getMouseModifier.js +10 -5
- package/dist/cjs/eventDispatchers/shared/getMouseModifier.js.map +1 -1
- 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 +2 -1
- package/dist/cjs/eventListeners/mouse/mouseDownListener.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 +3 -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 +3 -3
- package/dist/cjs/store/ToolGroupManager/ToolGroup.js +9 -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/MIPJumpToClickTool.js +4 -2
- package/dist/cjs/tools/MIPJumpToClickTool.js.map +1 -1
- 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/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 +31 -14
- 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 +29 -14
- package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/cjs/tools/annotation/CircleROITool.d.ts +0 -1
- package/dist/cjs/tools/annotation/CircleROITool.js +56 -53
- package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/CobbAngleTool.d.ts +0 -1
- package/dist/cjs/tools/annotation/CobbAngleTool.js +26 -11
- package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/DragProbeTool.js +13 -1
- package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.d.ts +0 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.js +48 -46
- 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 +26 -11
- package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +0 -1
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +50 -51
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/ProbeTool.d.ts +0 -1
- package/dist/cjs/tools/annotation/ProbeTool.js +18 -13
- package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/RectangleROITool.d.ts +0 -1
- package/dist/cjs/tools/annotation/RectangleROITool.js +46 -48
- package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
- package/dist/cjs/tools/base/AnnotationTool.d.ts +2 -1
- 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/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 +2 -2
- package/dist/cjs/tools/index.js +2 -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 +8 -1
- package/dist/cjs/types/ISetToolModeOptions.d.ts +2 -2
- package/dist/cjs/types/IToolGroup.d.ts +3 -2
- package/dist/cjs/types/ToolProps.d.ts +5 -1
- package/dist/cjs/types/index.d.ts +3 -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/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/stackPrefetch.js +4 -4
- package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
- 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/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 +1 -0
- package/dist/esm/enums/Events.js +1 -0
- package/dist/esm/enums/Events.js.map +1 -1
- package/dist/esm/eventDispatchers/shared/getMouseModifier.js +10 -5
- package/dist/esm/eventDispatchers/shared/getMouseModifier.js.map +1 -1
- 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 +2 -1
- package/dist/esm/eventListeners/mouse/mouseDownListener.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 +3 -3
- package/dist/esm/store/ToolGroupManager/ToolGroup.js +10 -3
- 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/MIPJumpToClickTool.js +4 -2
- package/dist/esm/tools/MIPJumpToClickTool.js.map +1 -1
- 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/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 +31 -14
- 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 +29 -14
- package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/esm/tools/annotation/CircleROITool.d.ts +0 -1
- package/dist/esm/tools/annotation/CircleROITool.js +55 -53
- package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/esm/tools/annotation/CobbAngleTool.d.ts +0 -1
- package/dist/esm/tools/annotation/CobbAngleTool.js +26 -11
- package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/DragProbeTool.js +13 -1
- package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.d.ts +0 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js +47 -46
- 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 +26 -11
- package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
- package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +0 -1
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +49 -51
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/esm/tools/annotation/ProbeTool.d.ts +0 -1
- package/dist/esm/tools/annotation/ProbeTool.js +18 -13
- package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/RectangleROITool.d.ts +0 -1
- package/dist/esm/tools/annotation/RectangleROITool.js +45 -48
- package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
- package/dist/esm/tools/base/AnnotationTool.d.ts +2 -1
- 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/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 +2 -2
- package/dist/esm/tools/index.js +2 -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 +8 -1
- package/dist/esm/types/ISetToolModeOptions.d.ts +2 -2
- package/dist/esm/types/IToolGroup.d.ts +3 -2
- package/dist/esm/types/ToolProps.d.ts +5 -1
- package/dist/esm/types/index.d.ts +3 -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/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/stackPrefetch.js +4 -4
- package/dist/esm/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
- package/src/drawingSvg/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/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 +13 -0
- package/src/eventDispatchers/shared/getMouseModifier.ts +15 -5
- package/src/eventListeners/keyboard/keyDownListener.ts +13 -0
- package/src/eventListeners/mouse/mouseDownListener.ts +3 -1
- package/src/eventListeners/touch/touchStartListener.ts +15 -5
- package/src/index.ts +2 -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 +21 -5
- 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/MIPJumpToClickTool.ts +6 -2
- package/src/tools/PlanarRotateTool.ts +3 -1
- package/src/tools/ReferenceCursors.ts +85 -29
- package/src/tools/ScaleOverlayTool.ts +3 -1
- package/src/tools/annotation/AngleTool.ts +38 -19
- package/src/tools/annotation/ArrowAnnotateTool.ts +16 -1
- package/src/tools/annotation/BidirectionalTool.ts +37 -23
- package/src/tools/annotation/CircleROITool.ts +83 -89
- package/src/tools/annotation/CobbAngleTool.ts +31 -16
- package/src/tools/annotation/DragProbeTool.ts +19 -1
- package/src/tools/annotation/EllipticalROITool.ts +63 -71
- package/src/tools/annotation/LengthTool.ts +32 -17
- package/src/tools/annotation/PlanarFreehandROITool.ts +56 -59
- package/src/tools/annotation/ProbeTool.ts +26 -19
- package/src/tools/annotation/RectangleROITool.ts +67 -75
- package/src/tools/base/AnnotationTool.ts +39 -17
- package/src/tools/base/index.ts +2 -1
- package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +3 -0
- package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +6 -1
- package/src/tools/displayTools/SegmentationDisplayTool.ts +12 -18
- package/src/tools/index.ts +2 -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 +20 -0
- package/src/types/ISetToolModeOptions.ts +2 -2
- package/src/types/IToolGroup.ts +6 -3
- package/src/types/ToolProps.ts +7 -1
- package/src/types/index.ts +9 -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/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/stackPrefetch.ts +10 -4
- 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
|
@@ -91,6 +91,7 @@ const { transformWorldToIndex } = csUtils;
|
|
|
91
91
|
*
|
|
92
92
|
* Read more in the Docs section of the website.
|
|
93
93
|
*/
|
|
94
|
+
|
|
94
95
|
class BidirectionalTool extends AnnotationTool {
|
|
95
96
|
static toolName;
|
|
96
97
|
|
|
@@ -115,6 +116,7 @@ class BidirectionalTool extends AnnotationTool {
|
|
|
115
116
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
116
117
|
configuration: {
|
|
117
118
|
preventHandleOutsideImage: false,
|
|
119
|
+
getTextLines: defaultGetTextLines,
|
|
118
120
|
},
|
|
119
121
|
}
|
|
120
122
|
) {
|
|
@@ -1160,11 +1162,26 @@ class BidirectionalTool extends AnnotationTool {
|
|
|
1160
1162
|
|
|
1161
1163
|
renderStatus = true;
|
|
1162
1164
|
|
|
1163
|
-
const
|
|
1165
|
+
const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
|
|
1166
|
+
if (!options.visibility) {
|
|
1167
|
+
data.handles.textBox = {
|
|
1168
|
+
hasMoved: false,
|
|
1169
|
+
worldPosition: <Types.Point3>[0, 0, 0],
|
|
1170
|
+
worldBoundingBox: {
|
|
1171
|
+
topLeft: <Types.Point3>[0, 0, 0],
|
|
1172
|
+
topRight: <Types.Point3>[0, 0, 0],
|
|
1173
|
+
bottomLeft: <Types.Point3>[0, 0, 0],
|
|
1174
|
+
bottomRight: <Types.Point3>[0, 0, 0],
|
|
1175
|
+
},
|
|
1176
|
+
};
|
|
1177
|
+
continue;
|
|
1178
|
+
}
|
|
1164
1179
|
|
|
1180
|
+
const textLines = this.configuration.getTextLines(data, targetId);
|
|
1165
1181
|
if (!textLines || textLines.length === 0) {
|
|
1166
1182
|
continue;
|
|
1167
1183
|
}
|
|
1184
|
+
|
|
1168
1185
|
let canvasTextBoxCoords;
|
|
1169
1186
|
|
|
1170
1187
|
if (!data.handles.textBox.hasMoved) {
|
|
@@ -1187,7 +1204,7 @@ class BidirectionalTool extends AnnotationTool {
|
|
|
1187
1204
|
textBoxPosition,
|
|
1188
1205
|
canvasCoordinates,
|
|
1189
1206
|
{},
|
|
1190
|
-
|
|
1207
|
+
options
|
|
1191
1208
|
);
|
|
1192
1209
|
|
|
1193
1210
|
const { x: left, y: top, width, height } = boundingBox;
|
|
@@ -1243,27 +1260,6 @@ class BidirectionalTool extends AnnotationTool {
|
|
|
1243
1260
|
return wouldPutThroughShortAxis;
|
|
1244
1261
|
};
|
|
1245
1262
|
|
|
1246
|
-
/**
|
|
1247
|
-
* get text box content
|
|
1248
|
-
*/
|
|
1249
|
-
_getTextLines = (data, targetId) => {
|
|
1250
|
-
const { cachedStats } = data;
|
|
1251
|
-
const { length, width, unit } = cachedStats[targetId];
|
|
1252
|
-
|
|
1253
|
-
if (length === undefined) {
|
|
1254
|
-
return;
|
|
1255
|
-
}
|
|
1256
|
-
|
|
1257
|
-
// spaceBetweenSlices & pixelSpacing &
|
|
1258
|
-
// magnitude in each direction? Otherwise, this is "px"?
|
|
1259
|
-
const textLines = [
|
|
1260
|
-
`L: ${roundNumber(length)} ${unit}`,
|
|
1261
|
-
`W: ${roundNumber(width)} ${unit}`,
|
|
1262
|
-
];
|
|
1263
|
-
|
|
1264
|
-
return textLines;
|
|
1265
|
-
};
|
|
1266
|
-
|
|
1267
1263
|
_calculateLength(pos1, pos2) {
|
|
1268
1264
|
const dx = pos1[0] - pos2[0];
|
|
1269
1265
|
const dy = pos1[1] - pos2[1];
|
|
@@ -1351,5 +1347,23 @@ class BidirectionalTool extends AnnotationTool {
|
|
|
1351
1347
|
};
|
|
1352
1348
|
}
|
|
1353
1349
|
|
|
1350
|
+
function defaultGetTextLines(data, targetId): string[] {
|
|
1351
|
+
const { cachedStats } = data;
|
|
1352
|
+
const { length, width, unit } = cachedStats[targetId];
|
|
1353
|
+
|
|
1354
|
+
if (length === undefined) {
|
|
1355
|
+
return;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
// spaceBetweenSlices & pixelSpacing &
|
|
1359
|
+
// magnitude in each direction? Otherwise, this is "px"?
|
|
1360
|
+
const textLines = [
|
|
1361
|
+
`L: ${roundNumber(length)} ${unit}`,
|
|
1362
|
+
`W: ${roundNumber(width)} ${unit}`,
|
|
1363
|
+
];
|
|
1364
|
+
|
|
1365
|
+
return textLines;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1354
1368
|
BidirectionalTool.toolName = 'Bidirectional';
|
|
1355
1369
|
export default BidirectionalTool;
|
|
@@ -68,6 +68,7 @@ import {
|
|
|
68
68
|
getCanvasCircleRadius,
|
|
69
69
|
} from '../../utilities/math/circle';
|
|
70
70
|
import { pointInEllipse } from '../../utilities/math/ellipse';
|
|
71
|
+
import { BasicStatsCalculator } from '../../utilities/math/basic';
|
|
71
72
|
|
|
72
73
|
const { transformWorldToIndex } = csUtils;
|
|
73
74
|
|
|
@@ -117,8 +118,10 @@ const { transformWorldToIndex } = csUtils;
|
|
|
117
118
|
*
|
|
118
119
|
* Read more in the Docs section of the website.
|
|
119
120
|
*/
|
|
121
|
+
|
|
120
122
|
class CircleROITool extends AnnotationTool {
|
|
121
123
|
static toolName;
|
|
124
|
+
|
|
122
125
|
touchDragCallback: any;
|
|
123
126
|
mouseDragCallback: any;
|
|
124
127
|
_throttledCalculateCachedStats: any;
|
|
@@ -143,6 +146,8 @@ class CircleROITool extends AnnotationTool {
|
|
|
143
146
|
// Radius of the circle to draw at the center point of the circle.
|
|
144
147
|
// Set this zero(0) in order not to draw the circle.
|
|
145
148
|
centerPointRadius: 0,
|
|
149
|
+
getTextLines: defaultGetTextLines,
|
|
150
|
+
statsCalculator: BasicStatsCalculator,
|
|
146
151
|
},
|
|
147
152
|
}
|
|
148
153
|
) {
|
|
@@ -281,7 +286,9 @@ class CircleROITool extends AnnotationTool {
|
|
|
281
286
|
canvasCoords,
|
|
282
287
|
]);
|
|
283
288
|
|
|
284
|
-
if (Math.abs(radiusPoint - radius) < proximity / 2)
|
|
289
|
+
if (Math.abs(radiusPoint - radius) < proximity / 2) {
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
285
292
|
|
|
286
293
|
return false;
|
|
287
294
|
};
|
|
@@ -819,7 +826,22 @@ class CircleROITool extends AnnotationTool {
|
|
|
819
826
|
|
|
820
827
|
renderStatus = true;
|
|
821
828
|
|
|
822
|
-
const
|
|
829
|
+
const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
|
|
830
|
+
if (!options.visibility) {
|
|
831
|
+
data.handles.textBox = {
|
|
832
|
+
hasMoved: false,
|
|
833
|
+
worldPosition: <Types.Point3>[0, 0, 0],
|
|
834
|
+
worldBoundingBox: {
|
|
835
|
+
topLeft: <Types.Point3>[0, 0, 0],
|
|
836
|
+
topRight: <Types.Point3>[0, 0, 0],
|
|
837
|
+
bottomLeft: <Types.Point3>[0, 0, 0],
|
|
838
|
+
bottomRight: <Types.Point3>[0, 0, 0],
|
|
839
|
+
},
|
|
840
|
+
};
|
|
841
|
+
continue;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
const textLines = this.configuration.getTextLines(data, targetId);
|
|
823
845
|
if (!textLines || textLines.length === 0) {
|
|
824
846
|
continue;
|
|
825
847
|
}
|
|
@@ -847,7 +869,7 @@ class CircleROITool extends AnnotationTool {
|
|
|
847
869
|
textBoxPosition,
|
|
848
870
|
canvasCoordinates,
|
|
849
871
|
{},
|
|
850
|
-
|
|
872
|
+
options
|
|
851
873
|
);
|
|
852
874
|
|
|
853
875
|
const { x: left, y: top, width, height } = boundingBox;
|
|
@@ -863,52 +885,6 @@ class CircleROITool extends AnnotationTool {
|
|
|
863
885
|
return renderStatus;
|
|
864
886
|
};
|
|
865
887
|
|
|
866
|
-
_getTextLines = (data, targetId: string): string[] => {
|
|
867
|
-
const cachedVolumeStats = data.cachedStats[targetId];
|
|
868
|
-
const {
|
|
869
|
-
radius,
|
|
870
|
-
radiusUnit,
|
|
871
|
-
area,
|
|
872
|
-
mean,
|
|
873
|
-
stdDev,
|
|
874
|
-
max,
|
|
875
|
-
isEmptyArea,
|
|
876
|
-
Modality,
|
|
877
|
-
areaUnit,
|
|
878
|
-
modalityUnit,
|
|
879
|
-
} = cachedVolumeStats;
|
|
880
|
-
|
|
881
|
-
const textLines: string[] = [];
|
|
882
|
-
|
|
883
|
-
if (radius) {
|
|
884
|
-
const radiusLine = isEmptyArea
|
|
885
|
-
? `Radius: Oblique not supported`
|
|
886
|
-
: `Radius: ${roundNumber(radius)} ${radiusUnit}`;
|
|
887
|
-
textLines.push(radiusLine);
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
if (area) {
|
|
891
|
-
const areaLine = isEmptyArea
|
|
892
|
-
? `Area: Oblique not supported`
|
|
893
|
-
: `Area: ${roundNumber(area)} ${areaUnit}`;
|
|
894
|
-
textLines.push(areaLine);
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
if (mean) {
|
|
898
|
-
textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
|
|
899
|
-
}
|
|
900
|
-
|
|
901
|
-
if (max) {
|
|
902
|
-
textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
if (stdDev) {
|
|
906
|
-
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
return textLines;
|
|
910
|
-
};
|
|
911
|
-
|
|
912
888
|
_calculateCachedStats = (
|
|
913
889
|
annotation,
|
|
914
890
|
viewport,
|
|
@@ -1009,57 +985,29 @@ class CircleROITool extends AnnotationTool {
|
|
|
1009
985
|
(worldHeight / aspect / scale / 2)
|
|
1010
986
|
);
|
|
1011
987
|
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
const meanMaxCalculator = ({ value: newValue }) => {
|
|
1018
|
-
if (newValue > max) {
|
|
1019
|
-
max = newValue;
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
mean += newValue;
|
|
1023
|
-
count += 1;
|
|
1024
|
-
};
|
|
1025
|
-
|
|
1026
|
-
pointInShapeCallback(
|
|
1027
|
-
imageData,
|
|
1028
|
-
(pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
|
|
1029
|
-
meanMaxCalculator,
|
|
1030
|
-
boundsIJK
|
|
988
|
+
const modalityUnit = getModalityUnit(
|
|
989
|
+
metadata.Modality,
|
|
990
|
+
annotation.metadata.referencedImageId,
|
|
991
|
+
modalityUnitOptions
|
|
1031
992
|
);
|
|
1032
993
|
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
const stdCalculator = ({ value }) => {
|
|
1036
|
-
const valueMinusMean = value - mean;
|
|
1037
|
-
|
|
1038
|
-
stdDev += valueMinusMean * valueMinusMean;
|
|
1039
|
-
};
|
|
1040
|
-
|
|
1041
|
-
pointInShapeCallback(
|
|
994
|
+
const pointsInShape = pointInShapeCallback(
|
|
1042
995
|
imageData,
|
|
1043
996
|
(pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
|
|
1044
|
-
|
|
997
|
+
this.configuration.statsCalculator.statsCallback,
|
|
1045
998
|
boundsIJK
|
|
1046
999
|
);
|
|
1047
1000
|
|
|
1048
|
-
|
|
1049
|
-
stdDev = Math.sqrt(stdDev);
|
|
1050
|
-
|
|
1051
|
-
const modalityUnit = getModalityUnit(
|
|
1052
|
-
metadata.Modality,
|
|
1053
|
-
annotation.metadata.referencedImageId,
|
|
1054
|
-
modalityUnitOptions
|
|
1055
|
-
);
|
|
1001
|
+
const stats = this.configuration.statsCalculator.getStatistics();
|
|
1056
1002
|
|
|
1057
1003
|
cachedStats[targetId] = {
|
|
1058
1004
|
Modality: metadata.Modality,
|
|
1059
1005
|
area,
|
|
1060
|
-
mean,
|
|
1061
|
-
max,
|
|
1062
|
-
stdDev,
|
|
1006
|
+
mean: stats[1]?.value,
|
|
1007
|
+
max: stats[0]?.value,
|
|
1008
|
+
stdDev: stats[2]?.value,
|
|
1009
|
+
statsArray: stats,
|
|
1010
|
+
pointsInShape: pointsInShape,
|
|
1063
1011
|
isEmptyArea,
|
|
1064
1012
|
areaUnit: getCalibratedAreaUnits(null, image),
|
|
1065
1013
|
radius: worldWidth / 2 / scale,
|
|
@@ -1100,5 +1048,51 @@ class CircleROITool extends AnnotationTool {
|
|
|
1100
1048
|
};
|
|
1101
1049
|
}
|
|
1102
1050
|
|
|
1051
|
+
function defaultGetTextLines(data, targetId): string[] {
|
|
1052
|
+
const cachedVolumeStats = data.cachedStats[targetId];
|
|
1053
|
+
const {
|
|
1054
|
+
radius,
|
|
1055
|
+
radiusUnit,
|
|
1056
|
+
area,
|
|
1057
|
+
mean,
|
|
1058
|
+
stdDev,
|
|
1059
|
+
max,
|
|
1060
|
+
isEmptyArea,
|
|
1061
|
+
Modality,
|
|
1062
|
+
areaUnit,
|
|
1063
|
+
modalityUnit,
|
|
1064
|
+
} = cachedVolumeStats;
|
|
1065
|
+
|
|
1066
|
+
const textLines: string[] = [];
|
|
1067
|
+
|
|
1068
|
+
if (radius) {
|
|
1069
|
+
const radiusLine = isEmptyArea
|
|
1070
|
+
? `Radius: Oblique not supported`
|
|
1071
|
+
: `Radius: ${roundNumber(radius)} ${radiusUnit}`;
|
|
1072
|
+
textLines.push(radiusLine);
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
if (area) {
|
|
1076
|
+
const areaLine = isEmptyArea
|
|
1077
|
+
? `Area: Oblique not supported`
|
|
1078
|
+
: `Area: ${roundNumber(area)} ${areaUnit}`;
|
|
1079
|
+
textLines.push(areaLine);
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
if (mean) {
|
|
1083
|
+
textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
if (max) {
|
|
1087
|
+
textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
if (stdDev) {
|
|
1091
|
+
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
return textLines;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1103
1097
|
CircleROITool.toolName = 'CircleROI';
|
|
1104
1098
|
export default CircleROITool;
|
|
@@ -75,6 +75,7 @@ class CobbAngleTool extends AnnotationTool {
|
|
|
75
75
|
configuration: {
|
|
76
76
|
shadow: true,
|
|
77
77
|
preventHandleOutsideImage: false,
|
|
78
|
+
getTextLines: defaultGetTextLines,
|
|
78
79
|
},
|
|
79
80
|
}
|
|
80
81
|
) {
|
|
@@ -769,7 +770,22 @@ class CobbAngleTool extends AnnotationTool {
|
|
|
769
770
|
continue;
|
|
770
771
|
}
|
|
771
772
|
|
|
772
|
-
const
|
|
773
|
+
const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
|
|
774
|
+
if (!options.visibility) {
|
|
775
|
+
data.handles.textBox = {
|
|
776
|
+
hasMoved: false,
|
|
777
|
+
worldPosition: <Types.Point3>[0, 0, 0],
|
|
778
|
+
worldBoundingBox: {
|
|
779
|
+
topLeft: <Types.Point3>[0, 0, 0],
|
|
780
|
+
topRight: <Types.Point3>[0, 0, 0],
|
|
781
|
+
bottomLeft: <Types.Point3>[0, 0, 0],
|
|
782
|
+
bottomRight: <Types.Point3>[0, 0, 0],
|
|
783
|
+
},
|
|
784
|
+
};
|
|
785
|
+
continue;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
const textLines = this.configuration.getTextLines(data, targetId);
|
|
773
789
|
|
|
774
790
|
if (!data.handles.textBox.hasMoved) {
|
|
775
791
|
const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates);
|
|
@@ -791,7 +807,7 @@ class CobbAngleTool extends AnnotationTool {
|
|
|
791
807
|
textBoxPosition,
|
|
792
808
|
canvasCoordinates,
|
|
793
809
|
{},
|
|
794
|
-
|
|
810
|
+
options
|
|
795
811
|
);
|
|
796
812
|
|
|
797
813
|
const { x: left, y: top, width, height } = boundingBox;
|
|
@@ -807,20 +823,6 @@ class CobbAngleTool extends AnnotationTool {
|
|
|
807
823
|
return renderStatus;
|
|
808
824
|
};
|
|
809
825
|
|
|
810
|
-
// text line for the current active angle annotation
|
|
811
|
-
_getTextLines(data, targetId) {
|
|
812
|
-
const cachedVolumeStats = data.cachedStats[targetId];
|
|
813
|
-
const { angle } = cachedVolumeStats;
|
|
814
|
-
|
|
815
|
-
if (angle === undefined) {
|
|
816
|
-
return;
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
|
|
820
|
-
|
|
821
|
-
return textLines;
|
|
822
|
-
}
|
|
823
|
-
|
|
824
826
|
_calculateCachedStats(annotation, renderingEngine, enabledElement) {
|
|
825
827
|
const data = annotation.data;
|
|
826
828
|
const { viewportId, renderingEngineId } = enabledElement;
|
|
@@ -886,5 +888,18 @@ class CobbAngleTool extends AnnotationTool {
|
|
|
886
888
|
}
|
|
887
889
|
}
|
|
888
890
|
|
|
891
|
+
function defaultGetTextLines(data, targetId): string[] {
|
|
892
|
+
const cachedVolumeStats = data.cachedStats[targetId];
|
|
893
|
+
const { angle } = cachedVolumeStats;
|
|
894
|
+
|
|
895
|
+
if (angle === undefined) {
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
|
|
900
|
+
|
|
901
|
+
return textLines;
|
|
902
|
+
}
|
|
903
|
+
|
|
889
904
|
CobbAngleTool.toolName = 'CobbAngle';
|
|
890
905
|
export default CobbAngleTool;
|
|
@@ -44,6 +44,7 @@ class DragProbeTool extends ProbeTool {
|
|
|
44
44
|
configuration: {
|
|
45
45
|
shadow: true,
|
|
46
46
|
preventHandleOutsideImage: false,
|
|
47
|
+
getTextLines: defaultGetTextLines,
|
|
47
48
|
},
|
|
48
49
|
}
|
|
49
50
|
) {
|
|
@@ -205,7 +206,7 @@ class DragProbeTool extends ProbeTool {
|
|
|
205
206
|
|
|
206
207
|
renderStatus = true;
|
|
207
208
|
|
|
208
|
-
const textLines = this.
|
|
209
|
+
const textLines = this.configuration.getTextLines(data, targetId);
|
|
209
210
|
if (textLines) {
|
|
210
211
|
const textCanvasCoordinates = [
|
|
211
212
|
canvasCoordinates[0] + 6,
|
|
@@ -227,5 +228,22 @@ class DragProbeTool extends ProbeTool {
|
|
|
227
228
|
};
|
|
228
229
|
}
|
|
229
230
|
|
|
231
|
+
function defaultGetTextLines(data, targetId): string[] {
|
|
232
|
+
const cachedVolumeStats = data.cachedStats[targetId];
|
|
233
|
+
const { index, value, modalityUnit } = cachedVolumeStats;
|
|
234
|
+
|
|
235
|
+
if (value === undefined) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const textLines = [];
|
|
240
|
+
|
|
241
|
+
textLines.push(`(${index[0]}, ${index[1]}, ${index[2]})`);
|
|
242
|
+
|
|
243
|
+
textLines.push(`${value.toFixed(2)} ${modalityUnit}`);
|
|
244
|
+
|
|
245
|
+
return textLines;
|
|
246
|
+
}
|
|
247
|
+
|
|
230
248
|
DragProbeTool.toolName = 'DragProbe';
|
|
231
249
|
export default DragProbeTool;
|
|
@@ -66,6 +66,7 @@ import {
|
|
|
66
66
|
getModalityUnit,
|
|
67
67
|
} from '../../utilities/getModalityUnit';
|
|
68
68
|
import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
|
|
69
|
+
import { BasicStatsCalculator } from '../../utilities/math/basic';
|
|
69
70
|
|
|
70
71
|
const { transformWorldToIndex } = csUtils;
|
|
71
72
|
|
|
@@ -115,8 +116,10 @@ const { transformWorldToIndex } = csUtils;
|
|
|
115
116
|
*
|
|
116
117
|
* Read more in the Docs section of the website.
|
|
117
118
|
*/
|
|
119
|
+
|
|
118
120
|
class EllipticalROITool extends AnnotationTool {
|
|
119
121
|
static toolName;
|
|
122
|
+
|
|
120
123
|
touchDragCallback: any;
|
|
121
124
|
mouseDragCallback: any;
|
|
122
125
|
_throttledCalculateCachedStats: any;
|
|
@@ -145,6 +148,8 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
145
148
|
// Radius of the circle to draw at the center point of the ellipse.
|
|
146
149
|
// Set this zero(0) in order not to draw the circle.
|
|
147
150
|
centerPointRadius: 0,
|
|
151
|
+
getTextLines: defaultGetTextLines,
|
|
152
|
+
statsCalculator: BasicStatsCalculator,
|
|
148
153
|
},
|
|
149
154
|
}
|
|
150
155
|
) {
|
|
@@ -945,7 +950,22 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
945
950
|
|
|
946
951
|
renderStatus = true;
|
|
947
952
|
|
|
948
|
-
const
|
|
953
|
+
const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
|
|
954
|
+
if (!options.visibility) {
|
|
955
|
+
data.handles.textBox = {
|
|
956
|
+
hasMoved: false,
|
|
957
|
+
worldPosition: <Types.Point3>[0, 0, 0],
|
|
958
|
+
worldBoundingBox: {
|
|
959
|
+
topLeft: <Types.Point3>[0, 0, 0],
|
|
960
|
+
topRight: <Types.Point3>[0, 0, 0],
|
|
961
|
+
bottomLeft: <Types.Point3>[0, 0, 0],
|
|
962
|
+
bottomRight: <Types.Point3>[0, 0, 0],
|
|
963
|
+
},
|
|
964
|
+
};
|
|
965
|
+
continue;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
const textLines = this.configuration.getTextLines(data, targetId);
|
|
949
969
|
if (!textLines || textLines.length === 0) {
|
|
950
970
|
continue;
|
|
951
971
|
}
|
|
@@ -973,7 +993,7 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
973
993
|
textBoxPosition,
|
|
974
994
|
canvasCoordinates,
|
|
975
995
|
{},
|
|
976
|
-
|
|
996
|
+
options
|
|
977
997
|
);
|
|
978
998
|
|
|
979
999
|
const { x: left, y: top, width, height } = boundingBox;
|
|
@@ -989,35 +1009,6 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
989
1009
|
return renderStatus;
|
|
990
1010
|
};
|
|
991
1011
|
|
|
992
|
-
_getTextLines = (data, targetId: string): string[] => {
|
|
993
|
-
const cachedVolumeStats = data.cachedStats[targetId];
|
|
994
|
-
const { area, mean, stdDev, max, isEmptyArea, areaUnit, modalityUnit } =
|
|
995
|
-
cachedVolumeStats;
|
|
996
|
-
|
|
997
|
-
const textLines: string[] = [];
|
|
998
|
-
|
|
999
|
-
if (area) {
|
|
1000
|
-
const areaLine = isEmptyArea
|
|
1001
|
-
? `Area: Oblique not supported`
|
|
1002
|
-
: `Area: ${roundNumber(area)} ${areaUnit}`;
|
|
1003
|
-
textLines.push(areaLine);
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
|
-
if (mean) {
|
|
1007
|
-
textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
|
|
1008
|
-
}
|
|
1009
|
-
|
|
1010
|
-
if (max) {
|
|
1011
|
-
textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
|
|
1012
|
-
}
|
|
1013
|
-
|
|
1014
|
-
if (stdDev) {
|
|
1015
|
-
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
|
-
return textLines;
|
|
1019
|
-
};
|
|
1020
|
-
|
|
1021
1012
|
_calculateCachedStats = (
|
|
1022
1013
|
annotation,
|
|
1023
1014
|
viewport,
|
|
@@ -1116,57 +1107,29 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
1116
1107
|
scale /
|
|
1117
1108
|
scale;
|
|
1118
1109
|
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
const meanMaxCalculator = ({ value: newValue }) => {
|
|
1125
|
-
if (newValue > max) {
|
|
1126
|
-
max = newValue;
|
|
1127
|
-
}
|
|
1128
|
-
|
|
1129
|
-
mean += newValue;
|
|
1130
|
-
count += 1;
|
|
1131
|
-
};
|
|
1132
|
-
|
|
1133
|
-
pointInShapeCallback(
|
|
1134
|
-
imageData,
|
|
1135
|
-
(pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
|
|
1136
|
-
meanMaxCalculator,
|
|
1137
|
-
boundsIJK
|
|
1110
|
+
const modalityUnit = getModalityUnit(
|
|
1111
|
+
metadata.Modality,
|
|
1112
|
+
annotation.metadata.referencedImageId,
|
|
1113
|
+
modalityUnitOptions
|
|
1138
1114
|
);
|
|
1139
1115
|
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
const stdCalculator = ({ value }) => {
|
|
1143
|
-
const valueMinusMean = value - mean;
|
|
1144
|
-
|
|
1145
|
-
stdDev += valueMinusMean * valueMinusMean;
|
|
1146
|
-
};
|
|
1147
|
-
|
|
1148
|
-
pointInShapeCallback(
|
|
1116
|
+
const pointsInShape = pointInShapeCallback(
|
|
1149
1117
|
imageData,
|
|
1150
1118
|
(pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
|
|
1151
|
-
|
|
1119
|
+
this.configuration.statsCalculator.statsCallback,
|
|
1152
1120
|
boundsIJK
|
|
1153
1121
|
);
|
|
1154
1122
|
|
|
1155
|
-
|
|
1156
|
-
stdDev = Math.sqrt(stdDev);
|
|
1157
|
-
|
|
1158
|
-
const modalityUnit = getModalityUnit(
|
|
1159
|
-
metadata.Modality,
|
|
1160
|
-
annotation.metadata.referencedImageId,
|
|
1161
|
-
modalityUnitOptions
|
|
1162
|
-
);
|
|
1123
|
+
const stats = this.configuration.statsCalculator.getStatistics();
|
|
1163
1124
|
|
|
1164
1125
|
cachedStats[targetId] = {
|
|
1165
1126
|
Modality: metadata.Modality,
|
|
1166
1127
|
area,
|
|
1167
|
-
mean,
|
|
1168
|
-
max,
|
|
1169
|
-
stdDev,
|
|
1128
|
+
mean: stats[1]?.value,
|
|
1129
|
+
max: stats[0]?.value,
|
|
1130
|
+
stdDev: stats[2]?.value,
|
|
1131
|
+
statsArray: stats,
|
|
1132
|
+
pointsInShape: pointsInShape,
|
|
1170
1133
|
isEmptyArea,
|
|
1171
1134
|
areaUnit: getCalibratedAreaUnits(null, image),
|
|
1172
1135
|
modalityUnit,
|
|
@@ -1248,5 +1211,34 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
1248
1211
|
}
|
|
1249
1212
|
}
|
|
1250
1213
|
|
|
1214
|
+
function defaultGetTextLines(data, targetId): string[] {
|
|
1215
|
+
const cachedVolumeStats = data.cachedStats[targetId];
|
|
1216
|
+
const { area, mean, stdDev, max, isEmptyArea, areaUnit, modalityUnit } =
|
|
1217
|
+
cachedVolumeStats;
|
|
1218
|
+
|
|
1219
|
+
const textLines: string[] = [];
|
|
1220
|
+
|
|
1221
|
+
if (area) {
|
|
1222
|
+
const areaLine = isEmptyArea
|
|
1223
|
+
? `Area: Oblique not supported`
|
|
1224
|
+
: `Area: ${roundNumber(area)} ${areaUnit}`;
|
|
1225
|
+
textLines.push(areaLine);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
if (mean) {
|
|
1229
|
+
textLines.push(`Mean: ${roundNumber(mean)} ${modalityUnit}`);
|
|
1230
|
+
}
|
|
1231
|
+
|
|
1232
|
+
if (max) {
|
|
1233
|
+
textLines.push(`Max: ${roundNumber(max)} ${modalityUnit}`);
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
if (stdDev) {
|
|
1237
|
+
textLines.push(`Std Dev: ${roundNumber(stdDev)} ${modalityUnit}`);
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
return textLines;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1251
1243
|
EllipticalROITool.toolName = 'EllipticalROI';
|
|
1252
1244
|
export default EllipticalROITool;
|