@cornerstonejs/tools 5.0.0-beta.1 → 5.0.1
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/esm/config.d.ts +4 -0
- package/dist/esm/drawingSvg/drawPath.d.ts +3 -0
- package/dist/esm/drawingSvg/drawPath.js +4 -1
- package/dist/esm/eventListeners/keyboard/keyDownListener.js +2 -2
- package/dist/esm/eventListeners/mouse/getMouseEventPoints.d.ts +1 -1
- package/dist/esm/eventListeners/mouse/getMouseEventPoints.js +19 -1
- package/dist/esm/eventListeners/mouse/mouseDoubleClickListener.js +8 -1
- package/dist/esm/eventListeners/mouse/mouseDownListener.js +37 -5
- package/dist/esm/eventListeners/mouse/mouseMoveListener.js +3 -0
- package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +60 -92
- package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.js +49 -21
- package/dist/esm/eventListeners/segmentation/labelmap/performStackLabelmapUpdate.js +7 -13
- package/dist/esm/eventListeners/segmentation/labelmap/performVolumeLabelmapUpdate.js +44 -18
- package/dist/esm/eventListeners/touch/getTouchEventPoints.js +27 -4
- package/dist/esm/eventListeners/touch/touchStartListener.js +27 -9
- package/dist/esm/eventListeners/wheel/wheelListener.js +5 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/init.js +2 -0
- package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +10 -4
- package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +23 -20
- package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.d.ts +12 -0
- package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.js +7 -0
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +1 -10
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +28 -149
- package/dist/esm/stateManagement/segmentation/addColorLUT.js +7 -1
- package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.js +16 -1
- package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.js +9 -7
- package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.d.ts +1 -1
- package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.js +3 -2
- package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.d.ts +5 -0
- package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.js +58 -0
- package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.d.ts +52 -0
- package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.js +246 -0
- package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.d.ts +1 -0
- package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.js +1 -0
- package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +12 -1
- package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.js +3 -3
- package/dist/esm/stateManagement/segmentation/labelmapModel/index.d.ts +9 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/index.js +7 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.d.ts +54 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.js +224 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.d.ts +6 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.js +39 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.d.ts +23 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.js +269 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.d.ts +15 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.js +160 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.d.ts +4 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.js +42 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.d.ts +11 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.js +73 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.d.ts +17 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.js +75 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.d.ts +5 -0
- package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.js +106 -0
- package/dist/esm/stateManagement/segmentation/models/SegmentModel.d.ts +11 -0
- package/dist/esm/stateManagement/segmentation/models/SegmentModel.js +19 -0
- package/dist/esm/stateManagement/segmentation/models/SegmentationModel.d.ts +12 -0
- package/dist/esm/stateManagement/segmentation/models/SegmentationModel.js +23 -0
- package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +6 -10
- package/dist/esm/stateManagement/segmentation/segmentIndex.js +24 -0
- package/dist/esm/stateManagement/segmentation/segmentationEventManager.js +2 -9
- package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +2 -1
- package/dist/esm/stateManagement/segmentation/segmentationState.js +4 -1
- package/dist/esm/store/SynchronizerManager/Synchronizer.d.ts +3 -1
- package/dist/esm/store/state.js +2 -1
- package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.js +12 -3
- package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.js +5 -2
- package/dist/esm/synchronizers/callbacks/zoomPanSyncCallback.js +51 -3
- package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts +1 -1
- package/dist/esm/tools/AdvancedMagnifyTool.js +4 -1
- package/dist/esm/tools/CrosshairsTool.d.ts +4 -0
- package/dist/esm/tools/CrosshairsTool.js +95 -41
- package/dist/esm/tools/MagnifyTool.js +3 -1
- package/dist/esm/tools/OrientationControllerTool.d.ts +45 -0
- package/dist/esm/tools/OrientationControllerTool.js +454 -0
- package/dist/esm/tools/OrientationMarkerTool.js +4 -4
- package/dist/esm/tools/PanTool.js +26 -3
- package/dist/esm/tools/PlanarRotateTool.js +19 -4
- package/dist/esm/tools/ReferenceCursors.js +7 -1
- package/dist/esm/tools/SculptorTool/CircleSculptCursor.js +1 -1
- package/dist/esm/tools/TrackballRotateTool.js +3 -2
- package/dist/esm/tools/VolumeCroppingControlTool.d.ts +10 -35
- package/dist/esm/tools/VolumeCroppingControlTool.js +179 -699
- package/dist/esm/tools/VolumeCroppingTool.d.ts +34 -32
- package/dist/esm/tools/VolumeCroppingTool.js +813 -532
- package/dist/esm/tools/WindowLevelTool.d.ts +2 -1
- package/dist/esm/tools/WindowLevelTool.js +48 -4
- package/dist/esm/tools/ZoomTool.d.ts +8 -0
- package/dist/esm/tools/ZoomTool.js +92 -11
- package/dist/esm/tools/annotation/AngleTool.js +38 -32
- package/dist/esm/tools/annotation/ArrowAnnotateTool.js +30 -28
- package/dist/esm/tools/annotation/BidirectionalTool.js +51 -49
- package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -0
- package/dist/esm/tools/annotation/CircleROITool.js +89 -51
- package/dist/esm/tools/annotation/CobbAngleTool.js +1 -1
- package/dist/esm/tools/annotation/DragProbeTool.js +1 -1
- package/dist/esm/tools/annotation/ETDRSGridTool.js +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js +46 -39
- package/dist/esm/tools/annotation/HeightTool.js +1 -1
- package/dist/esm/tools/annotation/KeyImageTool.js +11 -11
- package/dist/esm/tools/annotation/LabelTool.js +37 -35
- package/dist/esm/tools/annotation/LengthTool.js +35 -33
- package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +6 -4
- package/dist/esm/tools/annotation/LivewireContourTool.js +4 -8
- package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js +6 -4
- package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +2 -1
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +11 -8
- package/dist/esm/tools/annotation/ProbeTool.js +66 -56
- package/dist/esm/tools/annotation/RectangleROITool.js +48 -37
- package/dist/esm/tools/annotation/RegionSegmentPlusTool.js +1 -1
- package/dist/esm/tools/annotation/RegionSegmentTool.js +1 -1
- package/dist/esm/tools/annotation/SplineContourSegmentationTool.js +1 -1
- package/dist/esm/tools/annotation/SplineROITool.js +60 -56
- package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +1 -1
- package/dist/esm/tools/annotation/UltrasoundPleuraBLineTool/UltrasoundPleuraBLineTool.js +57 -55
- package/dist/esm/tools/annotation/VideoRedactionTool.js +1 -1
- package/dist/esm/tools/base/AnnotationDisplayTool.js +9 -6
- package/dist/esm/tools/base/AnnotationTool.js +2 -1
- package/dist/esm/tools/base/BaseTool.js +16 -10
- package/dist/esm/tools/base/ContourSegmentationBaseTool.js +1 -1
- package/dist/esm/tools/base/GrowCutBaseTool.js +2 -2
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -4
- package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +15 -85
- package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.d.ts +5 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.js +191 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +4 -3
- package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +48 -209
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.d.ts +3 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.js +51 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.d.ts +4 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.js +3 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.d.ts +14 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.js +143 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.d.ts +40 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.js +79 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.d.ts +3 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.js +18 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.d.ts +9 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.js +56 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.d.ts +11 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.js +35 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.d.ts +48 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.js +0 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.d.ts +13 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.js +34 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.d.ts +2 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.js +1 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.d.ts +8 -0
- package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.js +18 -0
- package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +2 -2
- package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.d.ts +3 -0
- package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.js +16 -0
- package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.d.ts +2 -0
- package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.js +135 -0
- package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.d.ts +16 -0
- package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.js +267 -0
- package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.d.ts +27 -0
- package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.js +185 -0
- package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.d.ts +1 -0
- package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.js +16 -0
- package/dist/esm/tools/index.d.ts +2 -1
- package/dist/esm/tools/index.js +2 -1
- package/dist/esm/tools/segmentation/BrushTool.d.ts +9 -2
- package/dist/esm/tools/segmentation/BrushTool.js +123 -26
- package/dist/esm/tools/segmentation/CircleScissorsTool.js +19 -36
- package/dist/esm/tools/segmentation/LabelmapBaseTool.d.ts +2 -3
- package/dist/esm/tools/segmentation/LabelmapBaseTool.js +77 -46
- package/dist/esm/tools/segmentation/LabelmapEditWithContour.js +3 -3
- package/dist/esm/tools/segmentation/PaintFillTool.js +11 -4
- package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.d.ts +2 -0
- package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +16 -8
- package/dist/esm/tools/segmentation/RectangleScissorsTool.js +13 -6
- package/dist/esm/tools/segmentation/SegmentBidirectionalTool.js +63 -61
- package/dist/esm/tools/segmentation/SegmentSelectTool.js +4 -4
- package/dist/esm/tools/segmentation/SphereScissorsTool.js +11 -31
- package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +7 -0
- package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +47 -24
- package/dist/esm/tools/segmentation/strategies/compositions/circularCursor.js +49 -21
- package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +2 -2
- package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +5 -1
- package/dist/esm/tools/segmentation/strategies/compositions/islandRemovalComposition.js +2 -2
- package/dist/esm/tools/segmentation/strategies/compositions/preview.js +2 -2
- package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +14 -6
- package/dist/esm/tools/segmentation/strategies/fillCircle.d.ts +3 -1
- package/dist/esm/tools/segmentation/strategies/fillCircle.js +38 -31
- package/dist/esm/tools/segmentation/strategies/fillSphere.js +11 -3
- package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.d.ts +4 -0
- package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.js +23 -0
- package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +1 -1
- package/dist/esm/tools/segmentation/strategies/utils/handleUseSegmentCenterIndex.js +12 -11
- package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.d.ts +4 -0
- package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.js +41 -0
- package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.d.ts +3 -0
- package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.js +31 -0
- package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.d.ts +3 -0
- package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.js +38 -0
- package/dist/esm/tools/segmentation/utils/LazyBrushEditController.d.ts +19 -0
- package/dist/esm/tools/segmentation/utils/LazyBrushEditController.js +55 -0
- package/dist/esm/tools/segmentation/utils/lazyBrushPreview.d.ts +3 -0
- package/dist/esm/tools/segmentation/utils/lazyBrushPreview.js +34 -0
- package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.d.ts +3 -0
- package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.js +42 -0
- package/dist/esm/types/ISynchronizerEventHandler.d.ts +2 -1
- package/dist/esm/types/LabelmapToolOperationData.d.ts +5 -0
- package/dist/esm/types/LabelmapTypes.d.ts +29 -6
- package/dist/esm/types/SegmentationStateTypes.d.ts +6 -0
- package/dist/esm/utilities/boundingBox/index.d.ts +2 -1
- package/dist/esm/utilities/boundingBox/index.js +2 -1
- package/dist/esm/utilities/boundingBox/snapIndexBounds.d.ts +3 -0
- package/dist/esm/utilities/boundingBox/snapIndexBounds.js +9 -0
- package/dist/esm/utilities/calibrateImageSpacing.js +17 -2
- package/dist/esm/utilities/contours/AnnotationToPointData.js +1 -1
- package/dist/esm/utilities/draw3D/addLine3DBetweenPoints.d.ts +7 -0
- package/dist/esm/utilities/draw3D/addLine3DBetweenPoints.js +34 -0
- package/dist/esm/utilities/draw3D/calculateAdaptiveSphereRadius.d.ts +6 -0
- package/dist/esm/utilities/draw3D/calculateAdaptiveSphereRadius.js +7 -0
- package/dist/esm/utilities/draw3D/index.d.ts +2 -0
- package/dist/esm/utilities/draw3D/index.js +2 -0
- package/dist/esm/utilities/drawing/getTextBoxCoordsCanvas.js +22 -14
- package/dist/esm/utilities/getCenterAndRadiusInCanvas.d.ts +6 -0
- package/dist/esm/utilities/getCenterAndRadiusInCanvas.js +26 -0
- package/dist/esm/utilities/getEllipseWorldCoordinates.d.ts +2 -0
- package/dist/esm/utilities/getEllipseWorldCoordinates.js +26 -0
- package/dist/esm/utilities/getSphereBoundsInfo.js +5 -1
- package/dist/esm/utilities/getViewportICamera.d.ts +4 -0
- package/dist/esm/utilities/getViewportICamera.js +23 -0
- package/dist/esm/utilities/getViewportsForAnnotation.js +5 -1
- package/dist/esm/utilities/index.d.ts +2 -1
- package/dist/esm/utilities/index.js +2 -1
- package/dist/esm/utilities/interactionDragCoordinator.d.ts +5 -0
- package/dist/esm/utilities/interactionDragCoordinator.js +16 -0
- package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +9 -7
- package/dist/esm/utilities/pointInSurroundingSphereCallback.js +8 -1
- package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.js +121 -118
- package/dist/esm/utilities/segmentation/SegmentStatsCalculator.js +5 -4
- package/dist/esm/utilities/segmentation/VolumetricCalculator.js +1 -1
- package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
- package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentation.js +1 -1
- package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentationVolume.js +11 -2
- package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +36 -17
- package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +42 -25
- package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +3 -30
- package/dist/esm/utilities/segmentation/index.d.ts +2 -1
- package/dist/esm/utilities/segmentation/index.js +2 -1
- package/dist/esm/utilities/segmentation/utilsForWorker.js +6 -2
- package/dist/esm/utilities/segmentation/validateLabelmap.js +1 -1
- package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +0 -1
- package/dist/esm/utilities/touch/index.js +3 -2
- package/dist/esm/utilities/viewportCapabilities.d.ts +16 -0
- package/dist/esm/utilities/viewportCapabilities.js +18 -0
- package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.d.ts +1 -1
- package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.js +12 -4
- package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.d.ts +1 -1
- package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.js +11 -4
- package/dist/esm/utilities/viewportFilters/getViewportIdsWithToolToRender.js +1 -1
- package/dist/esm/utilities/viewportPresentation.d.ts +3 -0
- package/dist/esm/utilities/viewportPresentation.js +26 -0
- package/dist/esm/utilities/volumeCropping/computePlanePlaneIntersection.d.ts +6 -0
- package/dist/esm/utilities/volumeCropping/computePlanePlaneIntersection.js +37 -0
- package/dist/esm/utilities/volumeCropping/constants.d.ts +31 -0
- package/dist/esm/utilities/volumeCropping/constants.js +31 -0
- package/dist/esm/utilities/volumeCropping/copyClippingPlanes.d.ts +2 -0
- package/dist/esm/utilities/volumeCropping/copyClippingPlanes.js +6 -0
- package/dist/esm/utilities/volumeCropping/extractVolumeDirectionVectors.d.ts +9 -0
- package/dist/esm/utilities/volumeCropping/extractVolumeDirectionVectors.js +9 -0
- package/dist/esm/utilities/volumeCropping/findLineBoundsIntersection.d.ts +5 -0
- package/dist/esm/utilities/volumeCropping/findLineBoundsIntersection.js +50 -0
- package/dist/esm/utilities/volumeCropping/getColorKeyForPlaneIndex.d.ts +1 -0
- package/dist/esm/utilities/volumeCropping/getColorKeyForPlaneIndex.js +13 -0
- package/dist/esm/utilities/volumeCropping/getOrientationFromNormal.d.ts +2 -0
- package/dist/esm/utilities/volumeCropping/getOrientationFromNormal.js +19 -0
- package/dist/esm/utilities/volumeCropping/index.d.ts +9 -0
- package/dist/esm/utilities/volumeCropping/index.js +9 -0
- package/dist/esm/utilities/volumeCropping/parseCornerKey.d.ts +8 -0
- package/dist/esm/utilities/volumeCropping/parseCornerKey.js +11 -0
- package/dist/esm/utilities/volumeCropping/types.d.ts +5 -0
- package/dist/esm/utilities/volumeCropping/types.js +0 -0
- package/dist/esm/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts +31 -0
- package/dist/esm/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js +391 -0
- package/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.d.ts +69 -0
- package/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.js +804 -0
- package/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts +7 -0
- package/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.js +144 -0
- package/dist/esm/utilities/vtkjs/index.d.ts +3 -0
- package/dist/esm/utilities/vtkjs/index.js +3 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +10 -9
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { AnnotationTool, BaseTool } from '../base';
|
|
2
3
|
import { vec2, vec3 } from 'gl-matrix';
|
|
3
4
|
import { getEnabledElement, VolumeViewport, utilities as csUtils, getEnabledElementByViewportId, EPSILON, } from '@cornerstonejs/core';
|
|
@@ -7,21 +8,22 @@ import { addAnnotation, getAnnotations, removeAnnotation, } from '../../stateMan
|
|
|
7
8
|
import { isAnnotationLocked } from '../../stateManagement/annotation/annotationLocking';
|
|
8
9
|
import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
|
|
9
10
|
import { triggerAnnotationCompleted, triggerAnnotationModified, } from '../../stateManagement/annotation/helpers/state';
|
|
10
|
-
import { drawCircle as drawCircleSvg, drawHandles as drawHandlesSvg, } from '../../drawingSvg';
|
|
11
|
+
import { drawCircle as drawCircleSvg, drawHandles as drawHandlesSvg, drawEllipseByCoordinates, } from '../../drawingSvg';
|
|
11
12
|
import { state } from '../../store/state';
|
|
12
13
|
import { ChangeTypes, Events, MeasurementType } from '../../enums';
|
|
13
14
|
import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
|
|
14
15
|
import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
|
|
15
16
|
import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
|
|
16
17
|
import { getPixelValueUnits } from '../../utilities/getPixelValueUnits';
|
|
18
|
+
import { viewportSupportsImageSlices } from '../../utilities/viewportCapabilities';
|
|
17
19
|
import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
|
|
18
20
|
import { getCanvasCircleCorners, getCanvasCircleRadius, } from '../../utilities/math/circle';
|
|
19
|
-
import { pointInEllipse } from '../../utilities/math/ellipse';
|
|
21
|
+
import { getCanvasEllipseCorners, pointInEllipse, } from '../../utilities/math/ellipse';
|
|
20
22
|
import { BasicStatsCalculator } from '../../utilities/math/basic';
|
|
21
23
|
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
24
|
+
import getEllipseWorldCoordinates from '../../utilities/getEllipseWorldCoordinates';
|
|
22
25
|
const { transformWorldToIndex } = csUtils;
|
|
23
26
|
class CircleROITool extends AnnotationTool {
|
|
24
|
-
static { this.toolName = 'CircleROI'; }
|
|
25
27
|
constructor(toolProps = {}, defaultToolProps = {
|
|
26
28
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
27
29
|
configuration: {
|
|
@@ -74,11 +76,28 @@ class CircleROITool extends AnnotationTool {
|
|
|
74
76
|
const enabledElement = getEnabledElement(element);
|
|
75
77
|
const { viewport } = enabledElement;
|
|
76
78
|
const { points } = annotation.data.handles;
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
79
|
+
const ellipseWorldCoordinates = getEllipseWorldCoordinates(points.slice(0, 2), viewport);
|
|
80
|
+
const ellipseCanvasCoordinates = ellipseWorldCoordinates.map((p) => viewport.worldToCanvas(p));
|
|
81
|
+
const canvasCorners = getCanvasEllipseCorners(ellipseCanvasCoordinates);
|
|
82
|
+
const [canvasPoint1, canvasPoint2] = canvasCorners;
|
|
83
|
+
const minorEllipse = {
|
|
84
|
+
left: Math.min(canvasPoint1[0], canvasPoint2[0]) + proximity / 2,
|
|
85
|
+
top: Math.min(canvasPoint1[1], canvasPoint2[1]) + proximity / 2,
|
|
86
|
+
width: Math.abs(canvasPoint1[0] - canvasPoint2[0]) - proximity,
|
|
87
|
+
height: Math.abs(canvasPoint1[1] - canvasPoint2[1]) - proximity,
|
|
88
|
+
};
|
|
89
|
+
const majorEllipse = {
|
|
90
|
+
left: Math.min(canvasPoint1[0], canvasPoint2[0]) - proximity / 2,
|
|
91
|
+
top: Math.min(canvasPoint1[1], canvasPoint2[1]) - proximity / 2,
|
|
92
|
+
width: Math.abs(canvasPoint1[0] - canvasPoint2[0]) + proximity,
|
|
93
|
+
height: Math.abs(canvasPoint1[1] - canvasPoint2[1]) + proximity,
|
|
94
|
+
};
|
|
95
|
+
const pointInMinorEllipse = this._pointInEllipseCanvas(minorEllipse, canvasCoords);
|
|
96
|
+
const pointInMajorEllipse = this._pointInEllipseCanvas(majorEllipse, canvasCoords);
|
|
97
|
+
if (pointInMajorEllipse && !pointInMinorEllipse) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
82
101
|
};
|
|
83
102
|
this.toolSelectedCallback = (evt, annotation) => {
|
|
84
103
|
const eventDetail = evt.detail;
|
|
@@ -376,7 +395,9 @@ class CircleROITool extends AnnotationTool {
|
|
|
376
395
|
const { referencedImageId } = annotation.metadata;
|
|
377
396
|
for (const targetId in data.cachedStats) {
|
|
378
397
|
if (targetId.startsWith('imageId')) {
|
|
379
|
-
const viewports = renderingEngine
|
|
398
|
+
const viewports = renderingEngine
|
|
399
|
+
.getViewports()
|
|
400
|
+
.filter(viewportSupportsImageSlices);
|
|
380
401
|
const invalidatedStack = viewports.find((vp) => {
|
|
381
402
|
const referencedImageURI = csUtils.imageIdToURI(referencedImageId);
|
|
382
403
|
const hasImageURI = vp.hasImageURI(referencedImageURI);
|
|
@@ -417,7 +438,9 @@ class CircleROITool extends AnnotationTool {
|
|
|
417
438
|
}
|
|
418
439
|
const dataId = `${annotationUID}-circle`;
|
|
419
440
|
const circleUID = '0';
|
|
420
|
-
|
|
441
|
+
const ellipseWorldCoordinates = getEllipseWorldCoordinates([points[0], points[1]], viewport);
|
|
442
|
+
const ellipseCanvasCoordinates = ellipseWorldCoordinates.map((p) => viewport.worldToCanvas(p));
|
|
443
|
+
drawEllipseByCoordinates(svgDrawingHelper, annotationUID, circleUID, ellipseCanvasCoordinates, {
|
|
421
444
|
color,
|
|
422
445
|
lineDash,
|
|
423
446
|
lineWidth,
|
|
@@ -480,7 +503,7 @@ class CircleROITool extends AnnotationTool {
|
|
|
480
503
|
const { dimensions, imageData, metadata, voxelManager } = image;
|
|
481
504
|
const handles = points.map((point) => imageData.worldToIndex(point));
|
|
482
505
|
const calibrate = getCalibratedLengthUnitsAndScale(image, handles);
|
|
483
|
-
const radius =
|
|
506
|
+
const radius = _a.calculateLengthInIndex(calibrate, handles.slice(0, 2));
|
|
484
507
|
const area = Math.PI * radius * radius;
|
|
485
508
|
const perimeter = 2 * Math.PI * radius;
|
|
486
509
|
const isEmptyArea = radius === 0;
|
|
@@ -578,50 +601,65 @@ class CircleROITool extends AnnotationTool {
|
|
|
578
601
|
};
|
|
579
602
|
this._throttledCalculateCachedStats = throttle(this._calculateCachedStats, 100, { trailing: true });
|
|
580
603
|
}
|
|
581
|
-
|
|
582
|
-
const
|
|
583
|
-
|
|
584
|
-
|
|
604
|
+
_pointInEllipseCanvas(ellipse, location) {
|
|
605
|
+
const xRadius = ellipse.width / 2;
|
|
606
|
+
const yRadius = ellipse.height / 2;
|
|
607
|
+
if (xRadius <= 0.0 || yRadius <= 0.0) {
|
|
608
|
+
return false;
|
|
585
609
|
}
|
|
586
|
-
const
|
|
587
|
-
const
|
|
588
|
-
const
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
610
|
+
const center = [ellipse.left + xRadius, ellipse.top + yRadius];
|
|
611
|
+
const normalized = [location[0] - center[0], location[1] - center[1]];
|
|
612
|
+
const inEllipse = (normalized[0] * normalized[0]) / (xRadius * xRadius) +
|
|
613
|
+
(normalized[1] * normalized[1]) / (yRadius * yRadius) <=
|
|
614
|
+
1.0;
|
|
615
|
+
return inEllipse;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
_a = CircleROITool;
|
|
619
|
+
CircleROITool.toolName = 'CircleROI';
|
|
620
|
+
CircleROITool.hydrate = (viewportId, points, options) => {
|
|
621
|
+
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
622
|
+
if (!enabledElement) {
|
|
623
|
+
return;
|
|
624
|
+
}
|
|
625
|
+
const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = _a.hydrateBase(_a, enabledElement, points, options);
|
|
626
|
+
const { toolInstance, ...serializableOptions } = options || {};
|
|
627
|
+
const annotation = {
|
|
628
|
+
annotationUID: options?.annotationUID || csUtils.uuidv4(),
|
|
629
|
+
data: {
|
|
630
|
+
handles: {
|
|
631
|
+
points,
|
|
632
|
+
textBox: {
|
|
633
|
+
hasMoved: false,
|
|
634
|
+
worldPosition: [0, 0, 0],
|
|
635
|
+
worldBoundingBox: {
|
|
636
|
+
topLeft: [0, 0, 0],
|
|
637
|
+
topRight: [0, 0, 0],
|
|
638
|
+
bottomLeft: [0, 0, 0],
|
|
639
|
+
bottomRight: [0, 0, 0],
|
|
602
640
|
},
|
|
603
|
-
activeHandleIndex: null,
|
|
604
641
|
},
|
|
605
|
-
|
|
606
|
-
cachedStats: {},
|
|
642
|
+
activeHandleIndex: null,
|
|
607
643
|
},
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
};
|
|
624
|
-
|
|
644
|
+
label: '',
|
|
645
|
+
cachedStats: {},
|
|
646
|
+
},
|
|
647
|
+
highlighted: false,
|
|
648
|
+
autoGenerated: false,
|
|
649
|
+
invalidated: false,
|
|
650
|
+
isLocked: false,
|
|
651
|
+
isVisible: true,
|
|
652
|
+
metadata: {
|
|
653
|
+
toolName: instance.getToolName(),
|
|
654
|
+
viewPlaneNormal,
|
|
655
|
+
FrameOfReferenceUID,
|
|
656
|
+
referencedImageId,
|
|
657
|
+
...serializableOptions,
|
|
658
|
+
},
|
|
659
|
+
};
|
|
660
|
+
addAnnotation(annotation, viewport.element);
|
|
661
|
+
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
662
|
+
};
|
|
625
663
|
function defaultGetTextLines(data, targetId) {
|
|
626
664
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
627
665
|
const { radius, radiusUnit, area, mean, stdDev, max, min, isEmptyArea, areaUnit, modalityUnit, } = cachedVolumeStats;
|
|
@@ -17,7 +17,6 @@ import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCur
|
|
|
17
17
|
import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
|
|
18
18
|
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
19
19
|
class CobbAngleTool extends AnnotationTool {
|
|
20
|
-
static { this.toolName = 'CobbAngle'; }
|
|
21
20
|
constructor(toolProps = {}, defaultToolProps = {
|
|
22
21
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
23
22
|
configuration: {
|
|
@@ -650,6 +649,7 @@ class CobbAngleTool extends AnnotationTool {
|
|
|
650
649
|
return cachedStats;
|
|
651
650
|
}
|
|
652
651
|
}
|
|
652
|
+
CobbAngleTool.toolName = 'CobbAngle';
|
|
653
653
|
function defaultGetTextLines(data, targetId) {
|
|
654
654
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
655
655
|
const { angle } = cachedVolumeStats;
|
|
@@ -5,7 +5,6 @@ import { hideElementCursor } from '../../cursors/elementCursor';
|
|
|
5
5
|
import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
|
|
6
6
|
import ProbeTool from './ProbeTool';
|
|
7
7
|
class DragProbeTool extends ProbeTool {
|
|
8
|
-
static { this.toolName = 'DragProbe'; }
|
|
9
8
|
constructor(toolProps = {}, defaultToolProps = {
|
|
10
9
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
11
10
|
configuration: {
|
|
@@ -116,6 +115,7 @@ class DragProbeTool extends ProbeTool {
|
|
|
116
115
|
};
|
|
117
116
|
}
|
|
118
117
|
}
|
|
118
|
+
DragProbeTool.toolName = 'DragProbe';
|
|
119
119
|
function defaultGetTextLines(data, targetId) {
|
|
120
120
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
121
121
|
const { index, value, modalityUnit } = cachedVolumeStats;
|
|
@@ -13,7 +13,6 @@ import { getCanvasCircleRadius } from '../../utilities/math/circle';
|
|
|
13
13
|
import { vec3 } from 'gl-matrix';
|
|
14
14
|
const CROSSHAIR_SIZE = 5;
|
|
15
15
|
class ETDRSGridTool extends AnnotationTool {
|
|
16
|
-
static { this.toolName = 'ETDRSGrid'; }
|
|
17
16
|
constructor(toolProps = {}, defaultToolProps = {
|
|
18
17
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
19
18
|
configuration: {
|
|
@@ -351,4 +350,5 @@ class ETDRSGridTool extends AnnotationTool {
|
|
|
351
350
|
return distance;
|
|
352
351
|
}
|
|
353
352
|
}
|
|
353
|
+
ETDRSGridTool.toolName = 'ETDRSGrid';
|
|
354
354
|
export default ETDRSGridTool;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { AnnotationTool } from '../base';
|
|
2
3
|
import { getEnabledElement, VolumeViewport, utilities as csUtils, getEnabledElementByViewportId, EPSILON, } from '@cornerstonejs/core';
|
|
3
4
|
import { getCalibratedAspect, getCalibratedLengthUnitsAndScale, } from '../../utilities/getCalibratedUnits';
|
|
@@ -15,13 +16,13 @@ import { pointInEllipse, getCanvasEllipseCorners, } from '../../utilities/math/e
|
|
|
15
16
|
import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
|
|
16
17
|
import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
|
|
17
18
|
import { getPixelValueUnits } from '../../utilities/getPixelValueUnits';
|
|
19
|
+
import { viewportSupportsImageSlices } from '../../utilities/viewportCapabilities';
|
|
18
20
|
import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
|
|
19
21
|
import { BasicStatsCalculator } from '../../utilities/math/basic';
|
|
20
22
|
import { vec2 } from 'gl-matrix';
|
|
21
23
|
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
22
24
|
const { transformWorldToIndex } = csUtils;
|
|
23
25
|
class EllipticalROITool extends AnnotationTool {
|
|
24
|
-
static { this.toolName = 'EllipticalROI'; }
|
|
25
26
|
constructor(toolProps = {}, defaultToolProps = {
|
|
26
27
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
27
28
|
configuration: {
|
|
@@ -417,7 +418,9 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
417
418
|
const { referencedImageId } = annotation.metadata;
|
|
418
419
|
for (const targetId in data.cachedStats) {
|
|
419
420
|
if (targetId.startsWith('imageId')) {
|
|
420
|
-
const viewports = renderingEngine
|
|
421
|
+
const viewports = renderingEngine
|
|
422
|
+
.getViewports()
|
|
423
|
+
.filter(viewportSupportsImageSlices);
|
|
421
424
|
const invalidatedStack = viewports.find((vp) => {
|
|
422
425
|
const referencedImageURI = csUtils.imageIdToURI(referencedImageId);
|
|
423
426
|
const hasImageURI = vp.hasImageURI(referencedImageURI);
|
|
@@ -548,11 +551,13 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
548
551
|
const { worldWidth, worldHeight } = getWorldWidthAndHeightFromTwoPoints(viewPlaneNormal, viewUp, worldPos1, worldPos2);
|
|
549
552
|
const isEmptyArea = worldWidth === 0 && worldHeight === 0;
|
|
550
553
|
const handles = [pos1Index, pos2Index];
|
|
551
|
-
const
|
|
554
|
+
const calibrate = getCalibratedLengthUnitsAndScale(image, handles);
|
|
555
|
+
const { areaUnit } = calibrate;
|
|
552
556
|
const aspect = getCalibratedAspect(image);
|
|
553
|
-
const
|
|
554
|
-
|
|
555
|
-
|
|
557
|
+
const indexHandles = points.map((p) => imageData.worldToIndex(p));
|
|
558
|
+
const width = _a.calculateLengthInIndex(calibrate, indexHandles.slice(2, 4));
|
|
559
|
+
const height = _a.calculateLengthInIndex(calibrate, indexHandles.slice(0, 2));
|
|
560
|
+
const area = Math.abs(Math.PI * (width / 2) * (height / aspect / 2));
|
|
556
561
|
const pixelUnitsOptions = {
|
|
557
562
|
isPreScaled: isViewportPreScaled(viewport, targetId),
|
|
558
563
|
isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
|
|
@@ -602,39 +607,6 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
602
607
|
};
|
|
603
608
|
this._throttledCalculateCachedStats = throttle(this._calculateCachedStats, 100, { trailing: true });
|
|
604
609
|
}
|
|
605
|
-
static { this.hydrate = (viewportId, points, options) => {
|
|
606
|
-
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
607
|
-
if (!enabledElement) {
|
|
608
|
-
return;
|
|
609
|
-
}
|
|
610
|
-
const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = this.hydrateBase(EllipticalROITool, enabledElement, points, options);
|
|
611
|
-
const { toolInstance, ...serializableOptions } = options || {};
|
|
612
|
-
const annotation = {
|
|
613
|
-
annotationUID: options?.annotationUID || csUtils.uuidv4(),
|
|
614
|
-
data: {
|
|
615
|
-
handles: {
|
|
616
|
-
points,
|
|
617
|
-
activeHandleIndex: null,
|
|
618
|
-
},
|
|
619
|
-
label: '',
|
|
620
|
-
cachedStats: {},
|
|
621
|
-
},
|
|
622
|
-
highlighted: false,
|
|
623
|
-
autoGenerated: false,
|
|
624
|
-
invalidated: false,
|
|
625
|
-
isLocked: false,
|
|
626
|
-
isVisible: true,
|
|
627
|
-
metadata: {
|
|
628
|
-
toolName: instance.getToolName(),
|
|
629
|
-
viewPlaneNormal,
|
|
630
|
-
FrameOfReferenceUID,
|
|
631
|
-
referencedImageId,
|
|
632
|
-
...serializableOptions,
|
|
633
|
-
},
|
|
634
|
-
};
|
|
635
|
-
addAnnotation(annotation, viewport.element);
|
|
636
|
-
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
637
|
-
}; }
|
|
638
610
|
_pointInEllipseCanvas(ellipse, location) {
|
|
639
611
|
const { xRadius, yRadius, center, angle } = ellipse;
|
|
640
612
|
const rotLocation = vec2.rotate(vec2.create(), location, center, -angle);
|
|
@@ -657,6 +629,41 @@ class EllipticalROITool extends AnnotationTool {
|
|
|
657
629
|
];
|
|
658
630
|
}
|
|
659
631
|
}
|
|
632
|
+
_a = EllipticalROITool;
|
|
633
|
+
EllipticalROITool.toolName = 'EllipticalROI';
|
|
634
|
+
EllipticalROITool.hydrate = (viewportId, points, options) => {
|
|
635
|
+
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
636
|
+
if (!enabledElement) {
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = _a.hydrateBase(_a, enabledElement, points, options);
|
|
640
|
+
const { toolInstance, ...serializableOptions } = options || {};
|
|
641
|
+
const annotation = {
|
|
642
|
+
annotationUID: options?.annotationUID || csUtils.uuidv4(),
|
|
643
|
+
data: {
|
|
644
|
+
handles: {
|
|
645
|
+
points,
|
|
646
|
+
activeHandleIndex: null,
|
|
647
|
+
},
|
|
648
|
+
label: '',
|
|
649
|
+
cachedStats: {},
|
|
650
|
+
},
|
|
651
|
+
highlighted: false,
|
|
652
|
+
autoGenerated: false,
|
|
653
|
+
invalidated: false,
|
|
654
|
+
isLocked: false,
|
|
655
|
+
isVisible: true,
|
|
656
|
+
metadata: {
|
|
657
|
+
toolName: instance.getToolName(),
|
|
658
|
+
viewPlaneNormal,
|
|
659
|
+
FrameOfReferenceUID,
|
|
660
|
+
referencedImageId,
|
|
661
|
+
...serializableOptions,
|
|
662
|
+
},
|
|
663
|
+
};
|
|
664
|
+
addAnnotation(annotation, viewport.element);
|
|
665
|
+
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
666
|
+
};
|
|
660
667
|
function defaultGetTextLines(data, targetId) {
|
|
661
668
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
662
669
|
const { area, mean, stdDev, max, isEmptyArea, areaUnit, modalityUnit, min } = cachedVolumeStats;
|
|
@@ -16,7 +16,6 @@ import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCur
|
|
|
16
16
|
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
17
17
|
const { transformWorldToIndex } = csUtils;
|
|
18
18
|
class HeightTool extends AnnotationTool {
|
|
19
|
-
static { this.toolName = 'Height'; }
|
|
20
19
|
constructor(toolProps = {}, defaultToolProps = {
|
|
21
20
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
22
21
|
configuration: {
|
|
@@ -380,6 +379,7 @@ class HeightTool extends AnnotationTool {
|
|
|
380
379
|
csUtils.indexWithinDimensions(index2, dimensions));
|
|
381
380
|
}
|
|
382
381
|
}
|
|
382
|
+
HeightTool.toolName = 'Height';
|
|
383
383
|
function defaultGetTextLines(data, targetId) {
|
|
384
384
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
385
385
|
const { height, unit } = cachedVolumeStats;
|
|
@@ -9,17 +9,6 @@ import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'
|
|
|
9
9
|
import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
|
|
10
10
|
import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
|
|
11
11
|
class KeyImageTool extends AnnotationTool {
|
|
12
|
-
static { this.toolName = 'KeyImage'; }
|
|
13
|
-
static { this.dataSeries = {
|
|
14
|
-
data: {
|
|
15
|
-
seriesLevel: true,
|
|
16
|
-
},
|
|
17
|
-
}; }
|
|
18
|
-
static { this.dataPoint = {
|
|
19
|
-
data: {
|
|
20
|
-
isPoint: true,
|
|
21
|
-
},
|
|
22
|
-
}; }
|
|
23
12
|
constructor(toolProps = {}, defaultToolProps = {
|
|
24
13
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
25
14
|
configuration: {
|
|
@@ -260,6 +249,17 @@ class KeyImageTool extends AnnotationTool {
|
|
|
260
249
|
csUtils.indexWithinDimensions(index2, dimensions));
|
|
261
250
|
}
|
|
262
251
|
}
|
|
252
|
+
KeyImageTool.toolName = 'KeyImage';
|
|
253
|
+
KeyImageTool.dataSeries = {
|
|
254
|
+
data: {
|
|
255
|
+
seriesLevel: true,
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
KeyImageTool.dataPoint = {
|
|
259
|
+
data: {
|
|
260
|
+
isPoint: true,
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
263
|
function getTextCallback(doneChangingTextCallback) {
|
|
264
264
|
return doneChangingTextCallback(prompt('Enter your annotation:'));
|
|
265
265
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { vec2 } from 'gl-matrix';
|
|
2
3
|
import { ChangeTypes, Events } from '../../enums';
|
|
3
4
|
import { getEnabledElement, utilities as csUtils, getEnabledElementByViewportId, } from '@cornerstonejs/core';
|
|
@@ -11,7 +12,6 @@ import { triggerAnnotationCompleted, triggerAnnotationModified, } from '../../st
|
|
|
11
12
|
import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
|
|
12
13
|
import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
|
|
13
14
|
class LabelTool extends AnnotationTool {
|
|
14
|
-
static { this.toolName = 'Label'; }
|
|
15
15
|
constructor(toolProps = {}, defaultToolProps = {
|
|
16
16
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
17
17
|
configuration: {
|
|
@@ -257,40 +257,6 @@ class LabelTool extends AnnotationTool {
|
|
|
257
257
|
return renderStatus;
|
|
258
258
|
};
|
|
259
259
|
}
|
|
260
|
-
static { this.hydrate = (viewportId, position, label, options) => {
|
|
261
|
-
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
262
|
-
if (!enabledElement) {
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
const { viewport } = enabledElement;
|
|
266
|
-
const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
|
|
267
|
-
const { viewPlaneNormal, viewUp } = viewport.getCamera();
|
|
268
|
-
const instance = new this();
|
|
269
|
-
const referencedImageId = instance.getReferencedImageId(viewport, position, viewPlaneNormal, viewUp);
|
|
270
|
-
const annotation = {
|
|
271
|
-
annotationUID: options?.annotationUID || csUtils.uuidv4(),
|
|
272
|
-
data: {
|
|
273
|
-
label,
|
|
274
|
-
handles: {
|
|
275
|
-
points: [position],
|
|
276
|
-
},
|
|
277
|
-
},
|
|
278
|
-
highlighted: false,
|
|
279
|
-
autoGenerated: false,
|
|
280
|
-
invalidated: false,
|
|
281
|
-
isLocked: false,
|
|
282
|
-
isVisible: true,
|
|
283
|
-
metadata: {
|
|
284
|
-
toolName: instance.getToolName(),
|
|
285
|
-
viewPlaneNormal,
|
|
286
|
-
FrameOfReferenceUID,
|
|
287
|
-
referencedImageId,
|
|
288
|
-
...options,
|
|
289
|
-
},
|
|
290
|
-
};
|
|
291
|
-
addAnnotation(annotation, viewport.element);
|
|
292
|
-
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
293
|
-
}; }
|
|
294
260
|
handleSelectedCallback(_evt, _annotation, _handle, _interactionType) { }
|
|
295
261
|
_doneChangingTextCallback(element, annotation, updatedLabel) {
|
|
296
262
|
annotation.data.label = updatedLabel;
|
|
@@ -303,6 +269,42 @@ class LabelTool extends AnnotationTool {
|
|
|
303
269
|
csUtils.indexWithinDimensions(index2, dimensions));
|
|
304
270
|
}
|
|
305
271
|
}
|
|
272
|
+
_a = LabelTool;
|
|
273
|
+
LabelTool.toolName = 'Label';
|
|
274
|
+
LabelTool.hydrate = (viewportId, position, label, options) => {
|
|
275
|
+
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
276
|
+
if (!enabledElement) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const { viewport } = enabledElement;
|
|
280
|
+
const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
|
|
281
|
+
const { viewPlaneNormal, viewUp } = viewport.getCamera();
|
|
282
|
+
const instance = new _a();
|
|
283
|
+
const referencedImageId = instance.getReferencedImageId(viewport, position, viewPlaneNormal, viewUp);
|
|
284
|
+
const annotation = {
|
|
285
|
+
annotationUID: options?.annotationUID || csUtils.uuidv4(),
|
|
286
|
+
data: {
|
|
287
|
+
label,
|
|
288
|
+
handles: {
|
|
289
|
+
points: [position],
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
highlighted: false,
|
|
293
|
+
autoGenerated: false,
|
|
294
|
+
invalidated: false,
|
|
295
|
+
isLocked: false,
|
|
296
|
+
isVisible: true,
|
|
297
|
+
metadata: {
|
|
298
|
+
toolName: instance.getToolName(),
|
|
299
|
+
viewPlaneNormal,
|
|
300
|
+
FrameOfReferenceUID,
|
|
301
|
+
referencedImageId,
|
|
302
|
+
...options,
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
addAnnotation(annotation, viewport.element);
|
|
306
|
+
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
307
|
+
};
|
|
306
308
|
function getTextCallback(doneChangingTextCallback) {
|
|
307
309
|
return doneChangingTextCallback(prompt('Enter your annotation:'));
|
|
308
310
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { Events, ChangeTypes, MeasurementType } from '../../enums';
|
|
2
3
|
import { getEnabledElement, utilities as csUtils, utilities, getEnabledElementByViewportId, } from '@cornerstonejs/core';
|
|
3
4
|
import { getCalibratedLengthUnitsAndScale } from '../../utilities/getCalibratedUnits';
|
|
@@ -15,7 +16,6 @@ import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnota
|
|
|
15
16
|
import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
|
|
16
17
|
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
17
18
|
class LengthTool extends AnnotationTool {
|
|
18
|
-
static { this.toolName = 'Length'; }
|
|
19
19
|
constructor(toolProps = {}, defaultToolProps = {
|
|
20
20
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
21
21
|
configuration: {
|
|
@@ -308,36 +308,6 @@ class LengthTool extends AnnotationTool {
|
|
|
308
308
|
};
|
|
309
309
|
this._throttledCalculateCachedStats = throttle(this._calculateCachedStats, 100, { trailing: true });
|
|
310
310
|
}
|
|
311
|
-
static { this.hydrate = (viewportId, points, options) => {
|
|
312
|
-
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
313
|
-
if (!enabledElement) {
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = this.hydrateBase(LengthTool, enabledElement, points, options);
|
|
317
|
-
const { toolInstance, ...serializableOptions } = options || {};
|
|
318
|
-
const annotation = {
|
|
319
|
-
annotationUID: options?.annotationUID || utilities.uuidv4(),
|
|
320
|
-
data: {
|
|
321
|
-
handles: {
|
|
322
|
-
points,
|
|
323
|
-
},
|
|
324
|
-
},
|
|
325
|
-
highlighted: false,
|
|
326
|
-
autoGenerated: false,
|
|
327
|
-
invalidated: false,
|
|
328
|
-
isLocked: false,
|
|
329
|
-
isVisible: true,
|
|
330
|
-
metadata: {
|
|
331
|
-
toolName: instance.getToolName(),
|
|
332
|
-
viewPlaneNormal,
|
|
333
|
-
FrameOfReferenceUID,
|
|
334
|
-
referencedImageId,
|
|
335
|
-
...serializableOptions,
|
|
336
|
-
},
|
|
337
|
-
};
|
|
338
|
-
addAnnotation(annotation, viewport.element);
|
|
339
|
-
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
340
|
-
}; }
|
|
341
311
|
handleSelectedCallback(evt, annotation, handle) {
|
|
342
312
|
const eventDetail = evt.detail;
|
|
343
313
|
const { element } = eventDetail;
|
|
@@ -378,8 +348,8 @@ class LengthTool extends AnnotationTool {
|
|
|
378
348
|
const handles = data.handles.points.map((point) => imageData.worldToIndex(point));
|
|
379
349
|
const calibrate = getCalibratedLengthUnitsAndScale(image, handles);
|
|
380
350
|
const { unit } = calibrate;
|
|
381
|
-
const length =
|
|
382
|
-
this.isHandleOutsideImage = !
|
|
351
|
+
const length = _a.calculateLengthInIndex(calibrate, handles);
|
|
352
|
+
this.isHandleOutsideImage = !_a.isInsideVolume(dimensions, handles);
|
|
383
353
|
const namedLength = {
|
|
384
354
|
name: 'length',
|
|
385
355
|
value: length,
|
|
@@ -400,6 +370,38 @@ class LengthTool extends AnnotationTool {
|
|
|
400
370
|
return cachedStats;
|
|
401
371
|
}
|
|
402
372
|
}
|
|
373
|
+
_a = LengthTool;
|
|
374
|
+
LengthTool.toolName = 'Length';
|
|
375
|
+
LengthTool.hydrate = (viewportId, points, options) => {
|
|
376
|
+
const enabledElement = getEnabledElementByViewportId(viewportId);
|
|
377
|
+
if (!enabledElement) {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = _a.hydrateBase(_a, enabledElement, points, options);
|
|
381
|
+
const { toolInstance, ...serializableOptions } = options || {};
|
|
382
|
+
const annotation = {
|
|
383
|
+
annotationUID: options?.annotationUID || utilities.uuidv4(),
|
|
384
|
+
data: {
|
|
385
|
+
handles: {
|
|
386
|
+
points,
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
highlighted: false,
|
|
390
|
+
autoGenerated: false,
|
|
391
|
+
invalidated: false,
|
|
392
|
+
isLocked: false,
|
|
393
|
+
isVisible: true,
|
|
394
|
+
metadata: {
|
|
395
|
+
toolName: instance.getToolName(),
|
|
396
|
+
viewPlaneNormal,
|
|
397
|
+
FrameOfReferenceUID,
|
|
398
|
+
referencedImageId,
|
|
399
|
+
...serializableOptions,
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
addAnnotation(annotation, viewport.element);
|
|
403
|
+
triggerAnnotationRenderForViewportIds([viewport.id]);
|
|
404
|
+
};
|
|
403
405
|
function defaultGetTextLines(data, targetId) {
|
|
404
406
|
const cachedVolumeStats = data.cachedStats[targetId];
|
|
405
407
|
const { length, unit } = cachedVolumeStats;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { utilities as csUtils } from '@cornerstonejs/core';
|
|
2
3
|
import LivewireContourTool from './LivewireContourTool';
|
|
3
4
|
import { LivewirePath } from '../../utilities/livewire/LiveWirePath';
|
|
@@ -6,7 +7,6 @@ import { ChangeTypes } from '../../enums';
|
|
|
6
7
|
import { drawPolyline as drawPolylineSvg } from '../../drawingSvg';
|
|
7
8
|
import AnnotationToPointData from '../../utilities/contours/AnnotationToPointData';
|
|
8
9
|
class LivewireContourSegmentationTool extends LivewireContourTool {
|
|
9
|
-
static { this.toolName = 'LivewireContourSegmentationTool'; }
|
|
10
10
|
updateInterpolatedAnnotation(annotation, enabledElement) {
|
|
11
11
|
if (this.editData ||
|
|
12
12
|
!annotation.invalidated ||
|
|
@@ -86,8 +86,10 @@ class LivewireContourSegmentationTool extends LivewireContourTool {
|
|
|
86
86
|
isContourSegmentationTool() {
|
|
87
87
|
return true;
|
|
88
88
|
}
|
|
89
|
-
static {
|
|
90
|
-
AnnotationToPointData.register(this);
|
|
91
|
-
}
|
|
92
89
|
}
|
|
90
|
+
_a = LivewireContourSegmentationTool;
|
|
91
|
+
LivewireContourSegmentationTool.toolName = 'LivewireContourSegmentationTool';
|
|
92
|
+
(() => {
|
|
93
|
+
AnnotationToPointData.register(_a);
|
|
94
|
+
})();
|
|
93
95
|
export default LivewireContourSegmentationTool;
|