@cornerstonejs/tools 0.56.2 → 0.56.4
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/package.json +5 -4
- package/src/constants/COLOR_LUT.ts +262 -0
- package/src/constants/index.ts +3 -0
- package/src/cursors/ImageMouseCursor.ts +39 -0
- package/src/cursors/MouseCursor.ts +114 -0
- package/src/cursors/SVGCursorDescriptor.ts +462 -0
- package/src/cursors/SVGMouseCursor.ts +145 -0
- package/src/cursors/elementCursor.ts +69 -0
- package/src/cursors/index.ts +24 -0
- package/src/cursors/setCursorForElement.ts +33 -0
- package/src/drawingSvg/_getHash.ts +9 -0
- package/src/drawingSvg/_setAttributesIfNecessary.ts +13 -0
- package/src/drawingSvg/_setNewAttributesIfValid.ts +10 -0
- package/src/drawingSvg/clearByToolType.ts +26 -0
- package/src/drawingSvg/draw.ts +16 -0
- package/src/drawingSvg/drawArrow.ts +82 -0
- package/src/drawingSvg/drawCircle.ts +62 -0
- package/src/drawingSvg/drawEllipse.ts +71 -0
- package/src/drawingSvg/drawHandles.ts +87 -0
- package/src/drawingSvg/drawLine.ts +70 -0
- package/src/drawingSvg/drawLink.ts +76 -0
- package/src/drawingSvg/drawLinkedTextBox.ts +64 -0
- package/src/drawingSvg/drawPolyline.ts +80 -0
- package/src/drawingSvg/drawRect.ts +70 -0
- package/src/drawingSvg/drawTextBox.ts +213 -0
- package/src/drawingSvg/getSvgDrawingHelper.ts +98 -0
- package/src/drawingSvg/index.ts +23 -0
- package/src/enums/AnnotationStyleStates.ts +22 -0
- package/src/enums/Events.ts +242 -0
- package/src/enums/SegmentationRepresentations.ts +12 -0
- package/src/enums/ToolBindings.ts +37 -0
- package/src/enums/ToolModes.ts +31 -0
- package/src/enums/Touch.ts +8 -0
- package/src/enums/index.js +16 -0
- package/src/eventDispatchers/annotationModifiedEventDispatcher.ts +41 -0
- package/src/eventDispatchers/cameraModifiedEventDispatcher.ts +41 -0
- package/src/eventDispatchers/imageRenderedEventDispatcher.ts +37 -0
- package/src/eventDispatchers/imageSpacingCalibratedEventDispatcher.ts +50 -0
- package/src/eventDispatchers/index.js +15 -0
- package/src/eventDispatchers/keyboardEventHandlers/index.js +4 -0
- package/src/eventDispatchers/keyboardEventHandlers/keyDown.ts +29 -0
- package/src/eventDispatchers/keyboardEventHandlers/keyUp.ts +33 -0
- package/src/eventDispatchers/keyboardToolEventDispatcher.ts +28 -0
- package/src/eventDispatchers/mouseEventHandlers/index.js +19 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseClick.ts +13 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseDoubleClick.ts +13 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +196 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseDownActivate.ts +35 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseDrag.ts +25 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseMove.ts +70 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseUp.ts +9 -0
- package/src/eventDispatchers/mouseEventHandlers/mouseWheel.ts +13 -0
- package/src/eventDispatchers/mouseToolEventDispatcher.ts +64 -0
- package/src/eventDispatchers/shared/customCallbackHandler.ts +73 -0
- package/src/eventDispatchers/shared/getActiveToolForKeyboardEvent.ts +58 -0
- package/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +61 -0
- package/src/eventDispatchers/shared/getActiveToolForTouchEvent.ts +64 -0
- package/src/eventDispatchers/shared/getMouseModifier.ts +30 -0
- package/src/eventDispatchers/shared/getToolsWithModesForMouseEvent.ts +56 -0
- package/src/eventDispatchers/shared/getToolsWithModesForTouchEvent.ts +54 -0
- package/src/eventDispatchers/touchEventHandlers/index.js +15 -0
- package/src/eventDispatchers/touchEventHandlers/touchDrag.ts +23 -0
- package/src/eventDispatchers/touchEventHandlers/touchEnd.ts +9 -0
- package/src/eventDispatchers/touchEventHandlers/touchPress.ts +13 -0
- package/src/eventDispatchers/touchEventHandlers/touchStart.ts +174 -0
- package/src/eventDispatchers/touchEventHandlers/touchStartActivate.ts +36 -0
- package/src/eventDispatchers/touchEventHandlers/touchTap.ts +9 -0
- package/src/eventDispatchers/touchToolEventDispatcher.ts +51 -0
- package/src/eventListeners/annotations/annotationModifiedListener.ts +22 -0
- package/src/eventListeners/annotations/annotationSelectionListener.ts +29 -0
- package/src/eventListeners/annotations/index.ts +4 -0
- package/src/eventListeners/index.ts +28 -0
- package/src/eventListeners/keyboard/index.ts +16 -0
- package/src/eventListeners/keyboard/keyDownListener.ts +99 -0
- package/src/eventListeners/mouse/getMouseEventPoints.ts +66 -0
- package/src/eventListeners/mouse/index.ts +55 -0
- package/src/eventListeners/mouse/mouseDoubleClickListener.ts +55 -0
- package/src/eventListeners/mouse/mouseDownListener.ts +519 -0
- package/src/eventListeners/mouse/mouseMoveListener.ts +33 -0
- package/src/eventListeners/segmentation/index.ts +11 -0
- package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +61 -0
- package/src/eventListeners/segmentation/segmentationModifiedEventListener.ts +32 -0
- package/src/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.ts +15 -0
- package/src/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.ts +16 -0
- package/src/eventListeners/touch/getTouchEventPoints.ts +75 -0
- package/src/eventListeners/touch/index.ts +37 -0
- package/src/eventListeners/touch/preventGhostClick.js +72 -0
- package/src/eventListeners/touch/touchStartListener.ts +499 -0
- package/src/eventListeners/wheel/index.ts +27 -0
- package/src/eventListeners/wheel/normalizeWheel.ts +69 -0
- package/src/eventListeners/wheel/wheelListener.ts +51 -0
- package/src/index.ts +133 -0
- package/src/init.ts +187 -0
- package/src/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.ts +399 -0
- package/src/stateManagement/annotation/annotationLocking.ts +178 -0
- package/src/stateManagement/annotation/annotationSelection.ts +163 -0
- package/src/stateManagement/annotation/annotationState.ts +180 -0
- package/src/stateManagement/annotation/annotationVisibility.ts +156 -0
- package/src/stateManagement/annotation/config/ToolStyle.ts +265 -0
- package/src/stateManagement/annotation/config/getFont.ts +36 -0
- package/src/stateManagement/annotation/config/getState.ts +26 -0
- package/src/stateManagement/annotation/config/helpers.ts +55 -0
- package/src/stateManagement/annotation/config/index.ts +5 -0
- package/src/stateManagement/annotation/helpers/state.ts +83 -0
- package/src/stateManagement/annotation/index.ts +15 -0
- package/src/stateManagement/index.js +40 -0
- package/src/stateManagement/segmentation/SegmentationStateManager.ts +491 -0
- package/src/stateManagement/segmentation/activeSegmentation.ts +60 -0
- package/src/stateManagement/segmentation/addSegmentationRepresentations.ts +77 -0
- package/src/stateManagement/segmentation/addSegmentations.ts +27 -0
- package/src/stateManagement/segmentation/config/index.ts +29 -0
- package/src/stateManagement/segmentation/config/segmentationColor.ts +132 -0
- package/src/stateManagement/segmentation/config/segmentationConfig.ts +195 -0
- package/src/stateManagement/segmentation/config/segmentationVisibility.ts +171 -0
- package/src/stateManagement/segmentation/helpers/index.ts +3 -0
- package/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +35 -0
- package/src/stateManagement/segmentation/helpers/validateSegmentationInput.ts +41 -0
- package/src/stateManagement/segmentation/index.ts +22 -0
- package/src/stateManagement/segmentation/removeSegmentationsFromToolGroup.ts +85 -0
- package/src/stateManagement/segmentation/segmentIndex.ts +38 -0
- package/src/stateManagement/segmentation/segmentLocking.ts +72 -0
- package/src/stateManagement/segmentation/segmentationState.ts +429 -0
- package/src/stateManagement/segmentation/triggerSegmentationEvents.ts +157 -0
- package/src/store/SynchronizerManager/Synchronizer.ts +344 -0
- package/src/store/SynchronizerManager/createSynchronizer.ts +41 -0
- package/src/store/SynchronizerManager/destroy.ts +14 -0
- package/src/store/SynchronizerManager/destroySynchronizer.ts +25 -0
- package/src/store/SynchronizerManager/getAllSynchronizers.ts +12 -0
- package/src/store/SynchronizerManager/getSynchronizer.ts +13 -0
- package/src/store/SynchronizerManager/getSynchronizersForViewport.ts +44 -0
- package/src/store/SynchronizerManager/index.js +15 -0
- package/src/store/ToolGroupManager/ToolGroup.ts +679 -0
- package/src/store/ToolGroupManager/createToolGroup.ts +33 -0
- package/src/store/ToolGroupManager/destroy.ts +24 -0
- package/src/store/ToolGroupManager/destroyToolGroup.ts +26 -0
- package/src/store/ToolGroupManager/getAllToolGroups.ts +12 -0
- package/src/store/ToolGroupManager/getToolGroup.ts +14 -0
- package/src/store/ToolGroupManager/getToolGroupForViewport.ts +44 -0
- package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +33 -0
- package/src/store/ToolGroupManager/index.ts +17 -0
- package/src/store/addEnabledElement.ts +137 -0
- package/src/store/addTool.ts +56 -0
- package/src/store/cancelActiveManipulations.ts +30 -0
- package/src/store/filterMoveableAnnotationTools.ts +61 -0
- package/src/store/filterToolsWithAnnotationsForElement.ts +51 -0
- package/src/store/filterToolsWithMoveableHandles.ts +51 -0
- package/src/store/index.ts +29 -0
- package/src/store/removeEnabledElement.ts +132 -0
- package/src/store/state.ts +57 -0
- package/src/store/svgNodeCache.ts +7 -0
- package/src/synchronizers/callbacks/areViewportsCoplanar .ts +12 -0
- package/src/synchronizers/callbacks/cameraSyncCallback.ts +33 -0
- package/src/synchronizers/callbacks/stackImageSyncCallback.ts +157 -0
- package/src/synchronizers/callbacks/voiSyncCallback.ts +51 -0
- package/src/synchronizers/callbacks/zoomPanSyncCallback.ts +43 -0
- package/src/synchronizers/index.ts +11 -0
- package/src/synchronizers/synchronizers/createCameraPositionSynchronizer.ts +25 -0
- package/src/synchronizers/synchronizers/createStackImageSynchronizer.ts +25 -0
- package/src/synchronizers/synchronizers/createVOISynchronizer.ts +24 -0
- package/src/synchronizers/synchronizers/createZoomPanSynchronizer.ts +25 -0
- package/src/synchronizers/synchronizers/index.ts +11 -0
- package/src/tools/CrosshairsTool.ts +2693 -0
- package/src/tools/MIPJumpToClickTool.ts +99 -0
- package/src/tools/MagnifyTool.ts +319 -0
- package/src/tools/PanTool.ts +58 -0
- package/src/tools/PlanarRotateTool.ts +77 -0
- package/src/tools/ReferenceCursors.ts +466 -0
- package/src/tools/ReferenceLinesTool.ts +279 -0
- package/src/tools/ScaleOverlayTool.ts +685 -0
- package/src/tools/StackScrollTool.ts +97 -0
- package/src/tools/StackScrollToolMouseWheelTool.ts +58 -0
- package/src/tools/TrackballRotateTool.ts +141 -0
- package/src/tools/VolumeRotateMouseWheelTool.ts +86 -0
- package/src/tools/WindowLevelTool.ts +260 -0
- package/src/tools/ZoomTool.ts +293 -0
- package/src/tools/annotation/AngleTool.ts +835 -0
- package/src/tools/annotation/ArrowAnnotateTool.ts +820 -0
- package/src/tools/annotation/BidirectionalTool.ts +1350 -0
- package/src/tools/annotation/CircleROITool.ts +1070 -0
- package/src/tools/annotation/CobbAngleTool.ts +815 -0
- package/src/tools/annotation/DragProbeTool.ts +213 -0
- package/src/tools/annotation/EllipticalROITool.ts +1223 -0
- package/src/tools/annotation/LengthTool.ts +861 -0
- package/src/tools/annotation/PlanarFreehandROITool.ts +636 -0
- package/src/tools/annotation/ProbeTool.ts +681 -0
- package/src/tools/annotation/RectangleROITool.ts +1028 -0
- package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +488 -0
- package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +462 -0
- package/src/tools/annotation/planarFreehandROITool/editLoopCommon.ts +331 -0
- package/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +74 -0
- package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +612 -0
- package/src/tools/annotation/planarFreehandROITool/openContourEndEditLoop.ts +74 -0
- package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +407 -0
- package/src/tools/base/AnnotationDisplayTool.ts +228 -0
- package/src/tools/base/AnnotationTool.ts +307 -0
- package/src/tools/base/BaseTool.ts +215 -0
- package/src/tools/base/index.ts +4 -0
- package/src/tools/displayTools/Contour/addContourToElement.ts +135 -0
- package/src/tools/displayTools/Contour/contourDisplay.ts +252 -0
- package/src/tools/displayTools/Contour/index.ts +3 -0
- package/src/tools/displayTools/Contour/removeContourFromElement.ts +35 -0
- package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +57 -0
- package/src/tools/displayTools/Labelmap/index.ts +4 -0
- package/src/tools/displayTools/Labelmap/labelmapConfig.ts +37 -0
- package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +461 -0
- package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +27 -0
- package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +30 -0
- package/src/tools/displayTools/SegmentationDisplayTool.ts +198 -0
- package/src/tools/index.ts +84 -0
- package/src/tools/segmentation/BrushTool.ts +474 -0
- package/src/tools/segmentation/CircleScissorsTool.ts +365 -0
- package/src/tools/segmentation/PaintFillTool.ts +370 -0
- package/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts +471 -0
- package/src/tools/segmentation/RectangleROIThresholdTool.ts +281 -0
- package/src/tools/segmentation/RectangleScissorsTool.ts +382 -0
- package/src/tools/segmentation/SphereScissorsTool.ts +368 -0
- package/src/tools/segmentation/strategies/eraseCircle.ts +30 -0
- package/src/tools/segmentation/strategies/eraseRectangle.ts +81 -0
- package/src/tools/segmentation/strategies/eraseSphere.ts +27 -0
- package/src/tools/segmentation/strategies/fillCircle.ts +185 -0
- package/src/tools/segmentation/strategies/fillRectangle.ts +110 -0
- package/src/tools/segmentation/strategies/fillSphere.ts +88 -0
- package/src/tools/segmentation/strategies/index.ts +9 -0
- package/src/types/AnnotationGroupSelector.ts +7 -0
- package/src/types/AnnotationStyle.ts +42 -0
- package/src/types/AnnotationTypes.ts +109 -0
- package/src/types/BoundsIJK.ts +5 -0
- package/src/types/CINETypes.ts +32 -0
- package/src/types/ContourTypes.ts +26 -0
- package/src/types/CursorTypes.ts +12 -0
- package/src/types/EventTypes.ts +657 -0
- package/src/types/FloodFillTypes.ts +19 -0
- package/src/types/IAnnotationManager.ts +89 -0
- package/src/types/IDistance.ts +16 -0
- package/src/types/IPoints.ts +18 -0
- package/src/types/ISetToolModeOptions.ts +29 -0
- package/src/types/ISynchronizerEventHandler.ts +11 -0
- package/src/types/IToolClassReference.ts +5 -0
- package/src/types/IToolGroup.ts +72 -0
- package/src/types/ITouchPoints.ts +14 -0
- package/src/types/InteractionTypes.ts +6 -0
- package/src/types/InternalToolTypes.ts +19 -0
- package/src/types/JumpToSliceOptions.ts +7 -0
- package/src/types/LabelmapTypes.ts +41 -0
- package/src/types/PlanarBoundingBox.ts +8 -0
- package/src/types/SVGDrawingHelper.ts +10 -0
- package/src/types/ScrollOptions.ts +9 -0
- package/src/types/SegmentationStateTypes.ts +248 -0
- package/src/types/ToolHandle.ts +26 -0
- package/src/types/ToolProps.ts +16 -0
- package/src/types/ToolSpecificAnnotationTypes.ts +311 -0
- package/src/types/index.ts +115 -0
- package/src/utilities/boundingBox/extend2DBoundingBoxInViewAxis.ts +29 -0
- package/src/utilities/boundingBox/getBoundingBoxAroundShape.ts +57 -0
- package/src/utilities/boundingBox/index.ts +4 -0
- package/src/utilities/calibrateImageSpacing.ts +46 -0
- package/src/utilities/cine/events.ts +9 -0
- package/src/utilities/cine/index.ts +5 -0
- package/src/utilities/cine/playClip.ts +435 -0
- package/src/utilities/cine/state.ts +18 -0
- package/src/utilities/clip.js +30 -0
- package/src/utilities/debounce.js +217 -0
- package/src/utilities/drawing/getTextBoxCoordsCanvas.ts +45 -0
- package/src/utilities/drawing/index.ts +3 -0
- package/src/utilities/dynamicVolume/getDataInTime.ts +110 -0
- package/src/utilities/dynamicVolume/index.ts +2 -0
- package/src/utilities/getAnnotationNearPoint.ts +130 -0
- package/src/utilities/getModalityUnit.ts +11 -0
- package/src/utilities/getToolsWithModesForElement.ts +52 -0
- package/src/utilities/index.ts +68 -0
- package/src/utilities/isObject.js +29 -0
- package/src/utilities/math/angle/angleBetweenLines.ts +29 -0
- package/src/utilities/math/circle/_types.ts +6 -0
- package/src/utilities/math/circle/getCanvasCircleCorners.ts +23 -0
- package/src/utilities/math/circle/getCanvasCircleRadius.ts +16 -0
- package/src/utilities/math/circle/index.ts +4 -0
- package/src/utilities/math/ellipse/getCanvasEllipseCorners.ts +26 -0
- package/src/utilities/math/ellipse/index.ts +4 -0
- package/src/utilities/math/ellipse/pointInEllipse.ts +38 -0
- package/src/utilities/math/ellipse/pointInEllipsoidWithConstraint.ts +35 -0
- package/src/utilities/math/index.ts +8 -0
- package/src/utilities/math/line/distanceToPoint.ts +24 -0
- package/src/utilities/math/line/distanceToPointSquared.ts +44 -0
- package/src/utilities/math/line/index.ts +5 -0
- package/src/utilities/math/line/intersectLine.ts +92 -0
- package/src/utilities/math/midPoint.ts +24 -0
- package/src/utilities/math/point/distanceToPoint.ts +22 -0
- package/src/utilities/math/point/index.ts +3 -0
- package/src/utilities/math/polyline/addCanvasPointsToArray.ts +62 -0
- package/src/utilities/math/polyline/calculateAreaOfPoints.ts +23 -0
- package/src/utilities/math/polyline/getIntersectionWithPolyline.ts +182 -0
- package/src/utilities/math/polyline/getSubPixelSpacingAndXYDirections.ts +99 -0
- package/src/utilities/math/polyline/index.ts +19 -0
- package/src/utilities/math/polyline/planarFreehandROIInternalTypes.ts +36 -0
- package/src/utilities/math/polyline/pointCanProjectOnLine.ts +57 -0
- package/src/utilities/math/polyline/pointsAreWithinCloseContourProximity.ts +15 -0
- package/src/utilities/math/rectangle/distanceToPoint.ts +82 -0
- package/src/utilities/math/rectangle/index.ts +3 -0
- package/src/utilities/math/sphere/index.ts +3 -0
- package/src/utilities/math/sphere/pointInSphere.ts +31 -0
- package/src/utilities/math/vec2/findClosestPoint.ts +40 -0
- package/src/utilities/math/vec2/index.ts +4 -0
- package/src/utilities/math/vec2/liangBarksyClip.ts +84 -0
- package/src/utilities/orientation/getOrientationStringLPS.ts +52 -0
- package/src/utilities/orientation/index.ts +4 -0
- package/src/utilities/orientation/invertOrientationStringLPS.ts +21 -0
- package/src/utilities/planar/filterAnnotationsForDisplay.ts +68 -0
- package/src/utilities/planar/filterAnnotationsWithinSlice.ts +85 -0
- package/src/utilities/planar/getPointInLineOfSightWithCriteria.ts +104 -0
- package/src/utilities/planar/getWorldWidthAndHeightFromCorners.ts +51 -0
- package/src/utilities/planar/getWorldWidthAndHeightFromTwoPoints.ts +51 -0
- package/src/utilities/planar/index.ts +18 -0
- package/src/utilities/planarFreehandROITool/index.ts +7 -0
- package/src/utilities/planarFreehandROITool/interpolateAnnotation.ts +87 -0
- package/src/utilities/planarFreehandROITool/interpolatePoints.ts +214 -0
- package/src/utilities/planarFreehandROITool/interpolation/algorithms/bspline.ts +55 -0
- package/src/utilities/planarFreehandROITool/interpolation/interpolateSegmentPoints.ts +90 -0
- package/src/utilities/pointInShapeCallback.ts +138 -0
- package/src/utilities/pointInSurroundingSphereCallback.ts +188 -0
- package/src/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.ts +76 -0
- package/src/utilities/rectangleROITool/index.ts +3 -0
- package/src/utilities/scroll.ts +62 -0
- package/src/utilities/segmentation/brushSizeForToolGroup.ts +72 -0
- package/src/utilities/segmentation/brushThresholdForToolGroup.ts +65 -0
- package/src/utilities/segmentation/createLabelmapVolumeForViewport.ts +74 -0
- package/src/utilities/segmentation/createMergedLabelmapForIndex.ts +65 -0
- package/src/utilities/segmentation/floodFill.ts +194 -0
- package/src/utilities/segmentation/getDefaultRepresentationConfig.ts +20 -0
- package/src/utilities/segmentation/index.ts +33 -0
- package/src/utilities/segmentation/isValidRepresentationConfig.ts +22 -0
- package/src/utilities/segmentation/rectangleROIThresholdVolumeByRange.ts +91 -0
- package/src/utilities/segmentation/thresholdSegmentationByRange.ts +129 -0
- package/src/utilities/segmentation/thresholdVolumeByRange.ts +150 -0
- package/src/utilities/segmentation/triggerSegmentationRender.ts +206 -0
- package/src/utilities/segmentation/utilities.ts +116 -0
- package/src/utilities/stackPrefetch/index.ts +8 -0
- package/src/utilities/stackPrefetch/stackPrefetch.ts +405 -0
- package/src/utilities/stackPrefetch/state.ts +17 -0
- package/src/utilities/throttle.js +69 -0
- package/src/utilities/touch/index.ts +246 -0
- package/src/utilities/triggerAnnotationRender.ts +237 -0
- package/src/utilities/triggerAnnotationRenderForViewportIds.ts +18 -0
- package/src/utilities/viewport/index.ts +5 -0
- package/src/utilities/viewport/isViewportPreScaled.ts +24 -0
- package/src/utilities/viewport/jumpToSlice.ts +73 -0
- package/src/utilities/viewport/jumpToWorld.ts +58 -0
- package/src/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.ts +28 -0
- package/src/utilities/viewportFilters/filterViewportsWithParallelNormals.ts +26 -0
- package/src/utilities/viewportFilters/filterViewportsWithSameOrientation.ts +15 -0
- package/src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts +72 -0
- package/src/utilities/viewportFilters/getViewportIdsWithToolToRender.ts +45 -0
- package/src/utilities/viewportFilters/index.ts +11 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ImageVolume, utilities as csUtils } from '@cornerstonejs/core';
|
|
2
|
+
import type { Types } from '@cornerstonejs/core';
|
|
3
|
+
|
|
4
|
+
import { getBoundingBoxAroundShape } from '../../../utilities/boundingBox';
|
|
5
|
+
import { pointInShapeCallback } from '../../../utilities';
|
|
6
|
+
import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
|
|
7
|
+
|
|
8
|
+
const { transformWorldToIndex } = csUtils;
|
|
9
|
+
|
|
10
|
+
type OperationData = {
|
|
11
|
+
segmentationId: string;
|
|
12
|
+
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
13
|
+
volume: ImageVolume;
|
|
14
|
+
constraintFn: (x: [number, number, number]) => boolean;
|
|
15
|
+
segmentIndex: number;
|
|
16
|
+
segmentsLocked: number[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* For each point in the bounding box around the rectangle, if the point is inside
|
|
21
|
+
* the rectangle, set the scalar value to the segmentIndex
|
|
22
|
+
* @param toolGroupId - string
|
|
23
|
+
* @param operationData - OperationData
|
|
24
|
+
* @param constraintFn - can be used to perform threshold segmentation
|
|
25
|
+
* @param inside - boolean
|
|
26
|
+
*/
|
|
27
|
+
// Todo: why we have another constraintFn? in addition to the one in the operationData?
|
|
28
|
+
function fillRectangle(
|
|
29
|
+
enabledElement: Types.IEnabledElement,
|
|
30
|
+
operationData: OperationData,
|
|
31
|
+
inside = true
|
|
32
|
+
): void {
|
|
33
|
+
const {
|
|
34
|
+
volume: segmentation,
|
|
35
|
+
points,
|
|
36
|
+
segmentsLocked,
|
|
37
|
+
segmentIndex,
|
|
38
|
+
segmentationId,
|
|
39
|
+
constraintFn,
|
|
40
|
+
} = operationData;
|
|
41
|
+
const { imageData, dimensions } = segmentation;
|
|
42
|
+
const scalarData = segmentation.getScalarData();
|
|
43
|
+
|
|
44
|
+
let rectangleCornersIJK = points.map((world) => {
|
|
45
|
+
return transformWorldToIndex(imageData, world);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// math round
|
|
49
|
+
rectangleCornersIJK = rectangleCornersIJK.map((point) => {
|
|
50
|
+
return point.map((coord) => {
|
|
51
|
+
return Math.round(coord);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const boundsIJK = getBoundingBoxAroundShape(rectangleCornersIJK, dimensions);
|
|
56
|
+
|
|
57
|
+
if (boundsIJK.every(([min, max]) => min !== max)) {
|
|
58
|
+
throw new Error('Oblique segmentation tools are not supported yet');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Since always all points inside the boundsIJK is inside the rectangle...
|
|
62
|
+
const pointInRectangle = () => true;
|
|
63
|
+
|
|
64
|
+
const callback = ({ value, index, pointIJK }) => {
|
|
65
|
+
if (segmentsLocked.includes(value)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!constraintFn) {
|
|
70
|
+
scalarData[index] = segmentIndex;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (constraintFn(pointIJK)) {
|
|
75
|
+
scalarData[index] = segmentIndex;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
pointInShapeCallback(imageData, pointInRectangle, callback, boundsIJK);
|
|
80
|
+
|
|
81
|
+
triggerSegmentationDataModified(segmentationId);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Fill the inside of a rectangle
|
|
86
|
+
* @param toolGroupId - The unique identifier of the tool group.
|
|
87
|
+
* @param operationData - The data that will be used to create the
|
|
88
|
+
* new rectangle.
|
|
89
|
+
* @param constraintFn - can be used to perform threshold segmentation
|
|
90
|
+
*/
|
|
91
|
+
export function fillInsideRectangle(
|
|
92
|
+
enabledElement: Types.IEnabledElement,
|
|
93
|
+
operationData: OperationData
|
|
94
|
+
): void {
|
|
95
|
+
fillRectangle(enabledElement, operationData, true);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Fill the area outside of a rectangle for the toolGroupId and segmentationRepresentationUID.
|
|
100
|
+
* @param toolGroupId - The unique identifier of the tool group.
|
|
101
|
+
* @param operationData - The data that will be used to create the
|
|
102
|
+
* new rectangle.
|
|
103
|
+
* @param constraintFn - can be used to perform threshold segmentation
|
|
104
|
+
*/
|
|
105
|
+
export function fillOutsideRectangle(
|
|
106
|
+
enabledElement: Types.IEnabledElement,
|
|
107
|
+
operationData: OperationData
|
|
108
|
+
): void {
|
|
109
|
+
fillRectangle(enabledElement, operationData, false);
|
|
110
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Types } from '@cornerstonejs/core';
|
|
2
|
+
|
|
3
|
+
import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
|
|
4
|
+
import { pointInSurroundingSphereCallback } from '../../../utilities';
|
|
5
|
+
|
|
6
|
+
type OperationData = {
|
|
7
|
+
points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
|
|
8
|
+
volume: Types.IImageVolume;
|
|
9
|
+
segmentIndex: number;
|
|
10
|
+
segmentationId: string;
|
|
11
|
+
segmentsLocked: number[];
|
|
12
|
+
viewPlaneNormal: Types.Point3;
|
|
13
|
+
viewUp: Types.Point3;
|
|
14
|
+
constraintFn: () => boolean;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
function fillSphere(
|
|
18
|
+
enabledElement: Types.IEnabledElement,
|
|
19
|
+
operationData: OperationData,
|
|
20
|
+
_inside = true
|
|
21
|
+
): void {
|
|
22
|
+
const { viewport } = enabledElement;
|
|
23
|
+
const {
|
|
24
|
+
volume: segmentation,
|
|
25
|
+
segmentsLocked,
|
|
26
|
+
segmentIndex,
|
|
27
|
+
segmentationId,
|
|
28
|
+
points,
|
|
29
|
+
} = operationData;
|
|
30
|
+
|
|
31
|
+
const { imageData, dimensions } = segmentation;
|
|
32
|
+
const scalarData = segmentation.getScalarData();
|
|
33
|
+
const scalarIndex = [];
|
|
34
|
+
|
|
35
|
+
const callback = ({ index, value }) => {
|
|
36
|
+
if (segmentsLocked.includes(value)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
scalarData[index] = segmentIndex;
|
|
40
|
+
scalarIndex.push(index);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
pointInSurroundingSphereCallback(
|
|
44
|
+
imageData,
|
|
45
|
+
[points[0], points[1]],
|
|
46
|
+
callback,
|
|
47
|
+
viewport as Types.IVolumeViewport
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
// Since the scalar indexes start from the top left corner of the cube, the first
|
|
51
|
+
// slice that needs to be rendered can be calculated from the first mask coordinate
|
|
52
|
+
// divided by the zMultiple, as well as the last slice for the last coordinate
|
|
53
|
+
const zMultiple = dimensions[0] * dimensions[1];
|
|
54
|
+
const minSlice = Math.floor(scalarIndex[0] / zMultiple);
|
|
55
|
+
const maxSlice = Math.floor(scalarIndex[scalarIndex.length - 1] / zMultiple);
|
|
56
|
+
const sliceArray = Array.from(
|
|
57
|
+
{ length: maxSlice - minSlice + 1 },
|
|
58
|
+
(v, k) => k + minSlice
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
triggerSegmentationDataModified(segmentationId, sliceArray);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Fill inside a sphere with the given segment index in the given operation data. The
|
|
66
|
+
* operation data contains the sphere required points.
|
|
67
|
+
* @param enabledElement - The element that is enabled and selected.
|
|
68
|
+
* @param operationData - OperationData
|
|
69
|
+
*/
|
|
70
|
+
export function fillInsideSphere(
|
|
71
|
+
enabledElement: Types.IEnabledElement,
|
|
72
|
+
operationData: OperationData
|
|
73
|
+
): void {
|
|
74
|
+
fillSphere(enabledElement, operationData, true);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Fill outside a sphere with the given segment index in the given operation data. The
|
|
79
|
+
* operation data contains the sphere required points.
|
|
80
|
+
* @param enabledElement - The element that is enabled and selected.
|
|
81
|
+
* @param operationData - OperationData
|
|
82
|
+
*/
|
|
83
|
+
export function fillOutsideSphere(
|
|
84
|
+
enabledElement: Types.IEnabledElement,
|
|
85
|
+
operationData: OperationData
|
|
86
|
+
): void {
|
|
87
|
+
fillSphere(enabledElement, operationData, false);
|
|
88
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
type Modes = '' | 'Active' | 'Passive' | 'Enabled';
|
|
2
|
+
type States = '' | 'Highlighted' | 'Selected' | 'Locked';
|
|
3
|
+
|
|
4
|
+
type Properties =
|
|
5
|
+
| 'color'
|
|
6
|
+
| 'lineWidth'
|
|
7
|
+
| 'lineDash'
|
|
8
|
+
| 'textBoxFontFamily'
|
|
9
|
+
| 'textBoxFontSize'
|
|
10
|
+
| 'textBoxColor'
|
|
11
|
+
| 'textBoxBackground'
|
|
12
|
+
| 'textBoxLinkLineWidth'
|
|
13
|
+
| 'textBoxLinkLineDash';
|
|
14
|
+
|
|
15
|
+
export type AnnotationStyle = {
|
|
16
|
+
[key in `${Properties}${States}${Modes}`]?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type ToolStyleConfig = {
|
|
20
|
+
[toolName: string]: AnnotationStyle;
|
|
21
|
+
global?: AnnotationStyle;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type StyleConfig = {
|
|
25
|
+
annotations?: {
|
|
26
|
+
[annotationUID: string]: AnnotationStyle;
|
|
27
|
+
};
|
|
28
|
+
viewports?: {
|
|
29
|
+
[viewportId: string]: ToolStyleConfig;
|
|
30
|
+
};
|
|
31
|
+
toolGroups?: {
|
|
32
|
+
[toolGroupId: string]: ToolStyleConfig;
|
|
33
|
+
};
|
|
34
|
+
default: ToolStyleConfig;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type StyleSpecifier = {
|
|
38
|
+
viewportId?: string;
|
|
39
|
+
toolGroupId?: string;
|
|
40
|
+
toolName?: string;
|
|
41
|
+
annotationUID?: string;
|
|
42
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { Types } from '@cornerstonejs/core';
|
|
2
|
+
|
|
3
|
+
type Annotation = {
|
|
4
|
+
/** A unique identifier for this annotation */
|
|
5
|
+
annotationUID?: string;
|
|
6
|
+
/** If the annotation is being hovered over and is highlighted */
|
|
7
|
+
highlighted?: boolean;
|
|
8
|
+
/** If the annotation is locked for manipulation */
|
|
9
|
+
isLocked?: boolean;
|
|
10
|
+
/** If the annotation is visible for manipulation */
|
|
11
|
+
isVisible?: boolean;
|
|
12
|
+
/** Has annotation data been invalidated (e.g., as a result of mouse interactions) */
|
|
13
|
+
invalidated?: boolean;
|
|
14
|
+
/** Metadata for annotation */
|
|
15
|
+
metadata: {
|
|
16
|
+
/**
|
|
17
|
+
* The position of the camera in world space
|
|
18
|
+
*/
|
|
19
|
+
cameraPosition?: Types.Point3;
|
|
20
|
+
/**
|
|
21
|
+
* The focal point of the camera in world space
|
|
22
|
+
*/
|
|
23
|
+
cameraFocalPoint?: Types.Point3;
|
|
24
|
+
/**
|
|
25
|
+
* The normal on which the tool was drawn
|
|
26
|
+
*/
|
|
27
|
+
viewPlaneNormal?: Types.Point3;
|
|
28
|
+
/**
|
|
29
|
+
* The viewUp on which the tool was drawn.
|
|
30
|
+
*/
|
|
31
|
+
viewUp?: Types.Point3;
|
|
32
|
+
/**
|
|
33
|
+
* The FrameOfReferenceUID
|
|
34
|
+
*/
|
|
35
|
+
FrameOfReferenceUID: string;
|
|
36
|
+
/**
|
|
37
|
+
* The registered name of the tool
|
|
38
|
+
*/
|
|
39
|
+
toolName: string;
|
|
40
|
+
/**
|
|
41
|
+
* An optional property used when annotating on a slice in a StackViewport,
|
|
42
|
+
* or when annotating in a VolumeViewport on a viewPlane that corresponds to
|
|
43
|
+
* original slice-based image data.
|
|
44
|
+
*/
|
|
45
|
+
referencedImageId?: string;
|
|
46
|
+
/**
|
|
47
|
+
* VolumeId of the volume that the tool was configured to work on.
|
|
48
|
+
*/
|
|
49
|
+
volumeId?: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Data for annotation, Derivatives need to define their own data types.
|
|
53
|
+
*/
|
|
54
|
+
data: {
|
|
55
|
+
/** Annotation handles that are grabbable for manipulation */
|
|
56
|
+
handles?: {
|
|
57
|
+
/** world location of the handles in the space */
|
|
58
|
+
points?: Types.Point3[];
|
|
59
|
+
/** index of the active handle being manipulated */
|
|
60
|
+
activeHandleIndex?: number | null;
|
|
61
|
+
/** annotation text box information */
|
|
62
|
+
textBox?: {
|
|
63
|
+
/** whether the text box has moved */
|
|
64
|
+
hasMoved: boolean;
|
|
65
|
+
/** the world location of the text box */
|
|
66
|
+
worldPosition: Types.Point3;
|
|
67
|
+
/** text box bounding box information */
|
|
68
|
+
worldBoundingBox: {
|
|
69
|
+
/** Top left location of the text box in the world space */
|
|
70
|
+
topLeft: Types.Point3;
|
|
71
|
+
/** Top right location of the text box in the world space */
|
|
72
|
+
topRight: Types.Point3;
|
|
73
|
+
/** Bottom left location of the text box in the world space */
|
|
74
|
+
bottomLeft: Types.Point3;
|
|
75
|
+
/** Bottom right location of the text box in the world space */
|
|
76
|
+
bottomRight: Types.Point3;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
[key: string]: any;
|
|
80
|
+
};
|
|
81
|
+
[key: string]: any;
|
|
82
|
+
/** Cached Annotation statistics which is specific to the tool */
|
|
83
|
+
cachedStats?: unknown;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/** Array of annotations */
|
|
88
|
+
type Annotations = Array<Annotation>;
|
|
89
|
+
|
|
90
|
+
type GroupSpecificAnnotations = {
|
|
91
|
+
/** Each tool annotations */
|
|
92
|
+
[toolName: string]: Annotations;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* All frame of reference specific annotations for all tools.
|
|
97
|
+
*/
|
|
98
|
+
type AnnotationState = {
|
|
99
|
+
/**
|
|
100
|
+
* A string representing the key that can be used
|
|
101
|
+
* to retrieve the key-specific annotations. For instance, our default
|
|
102
|
+
* annotation state key is the FrameOfReferenceUID which is for our default
|
|
103
|
+
* frameOfReferenceAnnotationManager. You can write your own annotation manager
|
|
104
|
+
* that works for a different use case and use a different key.
|
|
105
|
+
*/
|
|
106
|
+
[key: string]: GroupSpecificAnnotations;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { Annotation, Annotations, GroupSpecificAnnotations, AnnotationState };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Types } from '@cornerstonejs/core';
|
|
2
|
+
|
|
3
|
+
type PlayClipOptions = {
|
|
4
|
+
framesPerSecond?: number;
|
|
5
|
+
frameTimeVector?: number[];
|
|
6
|
+
reverse?: boolean;
|
|
7
|
+
loop?: boolean;
|
|
8
|
+
dynamicCineEnabled?: boolean;
|
|
9
|
+
frameTimeVectorSpeedMultiplier?: number;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
interface ToolData {
|
|
13
|
+
intervalId: number | undefined;
|
|
14
|
+
framesPerSecond: number;
|
|
15
|
+
lastFrameTimeStamp: number | undefined;
|
|
16
|
+
frameTimeVector: number[] | undefined;
|
|
17
|
+
ignoreFrameTimeVector: boolean;
|
|
18
|
+
usingFrameTimeVector: boolean;
|
|
19
|
+
speed: number;
|
|
20
|
+
reverse: boolean;
|
|
21
|
+
loop: boolean;
|
|
22
|
+
dynamicCineEnabled?: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type CinePlayContext = {
|
|
26
|
+
get numScrollSteps(): number;
|
|
27
|
+
get currentStepIndex(): number;
|
|
28
|
+
get frameTimeVectorEnabled(): boolean;
|
|
29
|
+
scroll(delta: number): void;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type { PlayClipOptions, ToolData, CinePlayContext };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Label map config for the label map representation
|
|
3
|
+
*/
|
|
4
|
+
export type ContourConfig = {
|
|
5
|
+
/** thickness of the outline when segmentation is active */
|
|
6
|
+
outlineWidthActive?: number;
|
|
7
|
+
/** thickness of the outline when segmentation is inactive */
|
|
8
|
+
outlineWidthInactive?: number;
|
|
9
|
+
/** alpha of outline for active segmentation */
|
|
10
|
+
outlineOpacity?: number;
|
|
11
|
+
/** alpha of outline for inactive segmentation */
|
|
12
|
+
outlineOpacityInactive?: number;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Labelmap representation type
|
|
17
|
+
*/
|
|
18
|
+
export type ContourRenderingConfig = {
|
|
19
|
+
// not much here yet
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type ContourSegmentationData = {
|
|
23
|
+
// Ids of the contourSets that are part of this segmentation
|
|
24
|
+
// in the cache
|
|
25
|
+
geometryIds: string[];
|
|
26
|
+
};
|