fix(SegmentationTools): [Bug] Changes of brush/eraser radius with hotkey do not reflect on segmentation tool (#5535)

This commit is contained in:
Vinícius Alves de Faria Resende 2025-11-05 12:34:41 -03:00 committed by GitHub
parent 0c8ab01d34
commit 29bd87c8c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 472 additions and 267 deletions

312
bun.lock
View File

@ -52,7 +52,7 @@
},
"addOns/externals/devDependencies": {
"name": "@externals/devDependencies",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@kitware/vtk.js": "32.12.0",
@ -137,22 +137,22 @@
},
"addOns/externals/dicom-microscopy-viewer": {
"name": "@externals/dicom-microscopy-viewer",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"dicom-microscopy-viewer": "0.48.6",
},
},
"extensions/cornerstone": {
"name": "@ohif/extension-cornerstone",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/ai": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/labelmap-interpolation": "4.5.20",
"@cornerstonejs/polymorphic-segmentation": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/ai": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/labelmap-interpolation": "4.9.0",
"@cornerstonejs/polymorphic-segmentation": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@itk-wasm/morphological-contour-interpolation": "1.1.0",
"@kitware/vtk.js": "32.12.0",
"html2canvas": "1.4.1",
@ -169,9 +169,9 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.5.20",
"@ohif/core": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@cornerstonejs/dicom-image-loader": "4.9.0",
"@ohif/core": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@ -183,19 +183,19 @@
},
"extensions/cornerstone-dicom-pmap": {
"name": "@ohif/extension-cornerstone-dicom-pmap",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@kitware/vtk.js": "32.12.0",
"react-color": "2.19.3",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@ -206,16 +206,16 @@
},
"extensions/cornerstone-dicom-rt": {
"name": "@ohif/extension-cornerstone-dicom-rt",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"react-color": "2.19.3",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@ -226,19 +226,19 @@
},
"extensions/cornerstone-dicom-seg": {
"name": "@ohif/extension-cornerstone-dicom-seg",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@kitware/vtk.js": "32.12.0",
"react-color": "2.19.3",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@ -249,19 +249,19 @@
},
"extensions/cornerstone-dicom-sr": {
"name": "@ohif/extension-cornerstone-dicom-sr",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-measurement-tracking": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-measurement-tracking": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@ -271,19 +271,19 @@
},
"extensions/cornerstone-dynamic-volume": {
"name": "@ohif/extension-cornerstone-dynamic-volume",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@ -293,7 +293,7 @@
},
"extensions/default": {
"name": "@ohif/extension-default",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/calculate-suv": "1.1.0",
@ -301,8 +301,8 @@
"lodash.uniqby": "4.7.0",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicomweb-client": "0.10.4",
"prop-types": "15.8.1",
@ -316,7 +316,7 @@
},
"extensions/dicom-microscopy": {
"name": "@ohif/extension-dicom-microscopy",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/codec-charls": "1.2.3",
@ -327,10 +327,10 @@
"mathjs": "12.4.3",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@ -341,14 +341,14 @@
},
"extensions/dicom-pdf": {
"name": "@ohif/extension-dicom-pdf",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@ -358,14 +358,14 @@
},
"extensions/dicom-video": {
"name": "@ohif/extension-dicom-video",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@ -375,20 +375,20 @@
},
"extensions/measurement-tracking": {
"name": "@ohif/extension-measurement-tracking",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.79",
"@xstate/react": "3.2.2",
"xstate": "4.38.3",
},
"peerDependencies": {
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"classnames": "2.5.1",
"dcmjs": "0.43.1",
"lodash.debounce": "4.0.8",
@ -401,14 +401,14 @@
},
"extensions/test-extension": {
"name": "@ohif/extension-test",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"dcmjs": "0.43.1",
"dicom-parser": "1.8.21",
"hammerjs": "2.0.8",
@ -418,7 +418,7 @@
},
"extensions/tmtv": {
"name": "@ohif/extension-tmtv",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"classnames": "2.5.1",
@ -435,16 +435,16 @@
},
"extensions/usAnnotation": {
"name": "@ohif/extension-ultrasound-pleura-bline",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/ui-next": "3.12.0-beta.78",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"@ohif/ui-next": "3.12.0-beta.79",
},
"devDependencies": {
"@babel/core": "7.28.0",
@ -487,7 +487,7 @@
},
"modes/basic": {
"name": "@ohif/mode-basic",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
},
@ -508,7 +508,7 @@
},
"modes/basic-dev-mode": {
"name": "@ohif/mode-basic-dev-mode",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@ -518,17 +518,17 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/extension-dicom-pdf": "3.12.0-beta.78",
"@ohif/extension-dicom-video": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/extension-dicom-pdf": "3.12.0-beta.79",
"@ohif/extension-dicom-video": "3.12.0-beta.79",
},
},
"modes/basic-test-mode": {
"name": "@ohif/mode-test",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@ -538,19 +538,19 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/extension-dicom-pdf": "3.12.0-beta.78",
"@ohif/extension-dicom-video": "3.12.0-beta.78",
"@ohif/extension-measurement-tracking": "3.12.0-beta.78",
"@ohif/extension-test": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/extension-dicom-pdf": "3.12.0-beta.79",
"@ohif/extension-dicom-video": "3.12.0-beta.79",
"@ohif/extension-measurement-tracking": "3.12.0-beta.79",
"@ohif/extension-test": "3.12.0-beta.79",
},
},
"modes/longitudinal": {
"name": "@ohif/mode-longitudinal",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@ -560,32 +560,32 @@
"webpack-merge": "5.10.0",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/extension-dicom-pdf": "3.12.0-beta.78",
"@ohif/extension-dicom-video": "3.12.0-beta.78",
"@ohif/extension-measurement-tracking": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/extension-dicom-pdf": "3.12.0-beta.79",
"@ohif/extension-dicom-video": "3.12.0-beta.79",
"@ohif/extension-measurement-tracking": "3.12.0-beta.79",
},
},
"modes/microscopy": {
"name": "@ohif/mode-microscopy",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
},
"peerDependencies": {
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-dicom-microscopy": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-dicom-microscopy": "3.12.0-beta.79",
},
},
"modes/preclinical-4d": {
"name": "@ohif/mode-preclinical-4d",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
},
@ -604,7 +604,7 @@
},
"modes/segmentation": {
"name": "@ohif/mode-segmentation",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@ -648,7 +648,7 @@
},
"modes/tmtv": {
"name": "@ohif/mode-tmtv",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next": "17.3.1",
@ -669,14 +669,14 @@
},
"modes/usAnnotation": {
"name": "@ohif/mode-ultrasound-pleura-bline",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.78",
"@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.78",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.79",
"@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.79",
"i18next": "17.3.1",
},
"devDependencies": {
@ -708,34 +708,34 @@
},
"platform/app": {
"name": "@ohif/app",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/codec-charls": "1.2.3",
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.5.20",
"@cornerstonejs/dicom-image-loader": "4.9.0",
"@emotion/serialize": "1.3.3",
"@ohif/core": "3.12.0-beta.78",
"@ohif/extension-cornerstone": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.78",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.78",
"@ohif/extension-default": "3.12.0-beta.78",
"@ohif/extension-dicom-microscopy": "3.12.0-beta.78",
"@ohif/extension-dicom-pdf": "3.12.0-beta.78",
"@ohif/extension-dicom-video": "3.12.0-beta.78",
"@ohif/extension-test": "3.12.0-beta.78",
"@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.78",
"@ohif/i18n": "3.12.0-beta.78",
"@ohif/mode-basic-dev-mode": "3.12.0-beta.78",
"@ohif/mode-longitudinal": "3.12.0-beta.78",
"@ohif/mode-microscopy": "3.12.0-beta.78",
"@ohif/mode-test": "3.12.0-beta.78",
"@ohif/mode-ultrasound-pleura-bline": "3.12.0-beta.78",
"@ohif/ui": "3.12.0-beta.78",
"@ohif/ui-next": "3.12.0-beta.78",
"@ohif/core": "3.12.0-beta.79",
"@ohif/extension-cornerstone": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-rt": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-seg": "3.12.0-beta.79",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.79",
"@ohif/extension-default": "3.12.0-beta.79",
"@ohif/extension-dicom-microscopy": "3.12.0-beta.79",
"@ohif/extension-dicom-pdf": "3.12.0-beta.79",
"@ohif/extension-dicom-video": "3.12.0-beta.79",
"@ohif/extension-test": "3.12.0-beta.79",
"@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.79",
"@ohif/i18n": "3.12.0-beta.79",
"@ohif/mode-basic-dev-mode": "3.12.0-beta.79",
"@ohif/mode-longitudinal": "3.12.0-beta.79",
"@ohif/mode-microscopy": "3.12.0-beta.79",
"@ohif/mode-test": "3.12.0-beta.79",
"@ohif/mode-ultrasound-pleura-bline": "3.12.0-beta.79",
"@ohif/ui": "3.12.0-beta.79",
"@ohif/ui-next": "3.12.0-beta.79",
"@svgr/webpack": "8.1.0",
"@types/react": "18.3.23",
"classnames": "2.5.1",
@ -787,7 +787,7 @@
},
"platform/cli": {
"name": "@ohif/cli",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"bin": {
"ohif-cli": "src/index.js",
},
@ -811,7 +811,7 @@
},
"platform/core": {
"name": "@ohif/core",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"dcmjs": "0.43.1",
@ -836,16 +836,16 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/dicom-image-loader": "4.5.20",
"@ohif/ui": "3.12.0-beta.78",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/dicom-image-loader": "4.9.0",
"@ohif/ui": "3.12.0-beta.79",
"cornerstone-math": "0.1.9",
"dicom-parser": "1.8.21",
},
},
"platform/i18n": {
"name": "@ohif/i18n",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@babel/runtime": "7.28.2",
"i18next-locize-backend": "2.2.2",
@ -870,7 +870,7 @@
},
"platform/ui": {
"name": "@ohif/ui",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@testing-library/react": "13.4.0",
"browser-detect": "0.2.28",
@ -921,7 +921,7 @@
},
"platform/ui-next": {
"name": "@ohif/ui-next",
"version": "3.12.0-beta.78",
"version": "3.12.0-beta.79",
"dependencies": {
"@radix-ui/react-accordion": "1.2.11",
"@radix-ui/react-checkbox": "1.3.2",
@ -1228,9 +1228,9 @@
"@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="],
"@cornerstonejs/adapters": ["@cornerstonejs/adapters@4.5.20", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.43.1", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "4.5.20", "@cornerstonejs/tools": "4.5.20" } }, "sha512-VamRAnlWoNrb4dKx8UfZBgR3mssei88OMoSaNG9V6g+CZUfpMEuZrinTN7ksph0kZ6h8YgIdfDoSzweTpS7cNA=="],
"@cornerstonejs/adapters": ["@cornerstonejs/adapters@4.9.0", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.43.1", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, "peerDependencies": { "@cornerstonejs/core": "4.9.0", "@cornerstonejs/tools": "4.9.0" } }, "sha512-wP5nZQobLe0JHfdftxqOm9901XPnDASDP40nEryKHI/t+8MMKq/XOI4zStkwdInimgaohHR9ppV8Ybuob7Zu4Q=="],
"@cornerstonejs/ai": ["@cornerstonejs/ai@4.5.20", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.43.1", "gl-matrix": "3.4.3", "lodash.clonedeep": "4.5.0", "ndarray": "1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "4.5.20", "@cornerstonejs/tools": "4.5.20" } }, "sha512-M+MumfAzEX2U5r0QRifYvYqH3xBf2qaqPNaMprHuzPG0Xh8NR9E4KvpZWdW8Wn04quTBO8O/nJ+H9deGlY0idA=="],
"@cornerstonejs/ai": ["@cornerstonejs/ai@4.9.0", "", { "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", "dcmjs": "0.43.1", "gl-matrix": "3.4.3", "lodash.clonedeep": "4.5.0", "ndarray": "1.0.19", "onnxruntime-common": "1.17.1", "onnxruntime-web": "1.17.1" }, "peerDependencies": { "@cornerstonejs/core": "4.9.0", "@cornerstonejs/tools": "4.9.0" } }, "sha512-eS036rfCJ4twK9LpyixUS2UgZ5IfR4A1gA959LyR9jyOY0ol24KeJyvXsZ9eSpbJO8VJ3tJVLwNVAKgjyosnwQ=="],
"@cornerstonejs/calculate-suv": ["@cornerstonejs/calculate-suv@1.1.0", "", {}, "sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w=="],
@ -1242,15 +1242,15 @@
"@cornerstonejs/codec-openjph": ["@cornerstonejs/codec-openjph@2.4.7", "", {}, "sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w=="],
"@cornerstonejs/core": ["@cornerstonejs/core@4.5.20", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "4.4.2", "gl-matrix": "3.4.3", "loglevel": "1.9.2" } }, "sha512-AWI8GilT9JfCBJywnQwZ5xQZG4EQHujIb4J9VPqyJ/K0ShQ4b7l9kabZ30S6zkimeClntNVVa1Quas7gWPW2LQ=="],
"@cornerstonejs/core": ["@cornerstonejs/core@4.9.0", "", { "dependencies": { "@kitware/vtk.js": "32.12.1", "comlink": "4.4.2", "gl-matrix": "3.4.3", "loglevel": "1.9.2" } }, "sha512-Gj8/nhogWg63r4vUSXD4QU8ffAB5AzUcAfNjPYBk7L6yzp42AwBMkuh2zetY1ZSJCgsCImIYpcvH/WLWpZa/9Q=="],
"@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@4.5.20", "", { "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.2.4", "@cornerstonejs/codec-openjph": "2.4.7", "comlink": "4.4.2", "dicom-parser": "1.8.21", "jpeg-lossless-decoder-js": "2.1.2", "pako": "2.1.0", "uuid": "9.0.1" }, "peerDependencies": { "@cornerstonejs/core": "4.5.20" } }, "sha512-eH4q4ERBlJJsJL9gRWEmCVR96VIxAYV3XIEs9PbRqMs4cfW4AjcupmwuCIbTAVP93LIDXxqN8f2lQXCDjQugjQ=="],
"@cornerstonejs/dicom-image-loader": ["@cornerstonejs/dicom-image-loader@4.9.0", "", { "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", "@cornerstonejs/codec-openjpeg": "1.3.0", "@cornerstonejs/codec-openjph": "2.4.7", "comlink": "4.4.2", "dicom-parser": "1.8.21", "jpeg-lossless-decoder-js": "2.1.2", "pako": "2.1.0", "uuid": "9.0.1" }, "peerDependencies": { "@cornerstonejs/core": "4.9.0" } }, "sha512-IKgpSjGPya/Nhntf6Cy09RafsO9sqDb4EwkoCC8cZ+QFCe4af6sNSIovJjOdREqIgB5iMEsTa8U1foe/slRwlA=="],
"@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@4.5.20", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "4.5.20", "@cornerstonejs/tools": "4.5.20", "@kitware/vtk.js": "32.12.1" } }, "sha512-lbVKXloFJk1HFHtFKLSjbchilnE1bfnM/JYlr16HSvlgb1rPd7GPoZFfrn034oowNEfOLjqJ+C35EaaIjSOxxw=="],
"@cornerstonejs/labelmap-interpolation": ["@cornerstonejs/labelmap-interpolation@4.9.0", "", { "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { "@cornerstonejs/core": "4.9.0", "@cornerstonejs/tools": "4.9.0", "@kitware/vtk.js": "32.12.1" } }, "sha512-LrWrXcLh9Gd4FE3hkq74bElGXJjF1izE9SFjvkYIHNUHGuIQiD2oYGlBFALXpjUb4i3B4hfVA0wz55z4Fz2vfg=="],
"@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@4.5.20", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "4.5.20", "@cornerstonejs/tools": "4.5.20", "@kitware/vtk.js": "32.12.1" } }, "sha512-s4es71KDzsrMPchGm5B3lERIF/M+OHMtFZbXAzGcZ8KnZZkmX1j1G6vxakcW8IjXL4knkDuSkZxevFXWIKyMoA=="],
"@cornerstonejs/polymorphic-segmentation": ["@cornerstonejs/polymorphic-segmentation@4.9.0", "", { "dependencies": { "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { "@cornerstonejs/core": "4.9.0", "@cornerstonejs/tools": "4.9.0", "@kitware/vtk.js": "32.12.1" } }, "sha512-oONftUjfDTfa7ex6zqeUtuPqqeFAATH5dszxiKh4xtoY2AlBhNFjfbhFLdWTa4Y1Lfl9yOWNK1sNZAOA1BnUXQ=="],
"@cornerstonejs/tools": ["@cornerstonejs/tools@4.5.20", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "4.5.20", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", "d3-array": "3.2.4", "d3-interpolate": "3.0.1", "gl-matrix": "3.4.3" } }, "sha512-FY2sxm7vPiCI1Vm1JsHeIYMi45686V8/RkRa47XDt/035B/v36pr81pyE9nl/jb7FJiHfzSyDeROJ8YoPVe9qQ=="],
"@cornerstonejs/tools": ["@cornerstonejs/tools@4.9.0", "", { "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2" }, "peerDependencies": { "@cornerstonejs/core": "4.9.0", "@kitware/vtk.js": "32.12.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", "d3-array": "3.2.4", "d3-interpolate": "3.0.1", "gl-matrix": "3.4.3" } }, "sha512-cUd50Lc85T4OwTXPrBTUjyIKHHe5icxR5N8H6X3NQFfhTsCB11nZLt7530hL2oQZmAleg5u853XbAVzoaa9mjg=="],
"@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="],

View File

@ -46,8 +46,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@kitware/vtk.js": "32.12.0",
"react-color": "2.19.3"
}

View File

@ -46,8 +46,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@kitware/vtk.js": "32.12.0",
"react-color": "2.19.3"
}

View File

@ -1,4 +1,6 @@
import { utilities as cstUtils } from '@cornerstonejs/tools';
import { useUIStateStore } from '@ohif/extension-default';
import LogicalContourOperationsOptions from './components/LogicalContourOperationsOptions';
import SimplifyContourOptions from './components/SimplifyContourOptions';
import SmoothContoursOptions from './components/SmoothContoursOptions';
@ -118,5 +120,23 @@ export function getToolbarModule({ servicesManager }: withAppTypes) {
};
},
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
evaluate: ({ button, radiusOptionId }) => {
const toolGroupIds = toolGroupService.getToolGroupIds();
if (!toolGroupIds?.length) {
return;
}
for (const toolGroupId of toolGroupIds) {
const brushSize = cstUtils.segmentation.getBrushSizeForToolGroup(toolGroupId);
if (brushSize) {
const option = toolbarService.getOptionById(button, radiusOptionId);
option.value = brushSize;
}
}
},
},
];
}

View File

@ -46,9 +46,9 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"classnames": "2.5.1"
}
}

View File

@ -42,8 +42,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"classnames": "2.5.1"
}
}

View File

@ -40,7 +40,7 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.5.20",
"@cornerstonejs/dicom-image-loader": "4.9.0",
"@ohif/core": "3.12.0-beta.80",
"@ohif/ui": "3.12.0-beta.80",
"dcmjs": "0.43.1",
@ -53,12 +53,12 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/adapters": "4.5.20",
"@cornerstonejs/ai": "4.5.20",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/labelmap-interpolation": "4.5.20",
"@cornerstonejs/polymorphic-segmentation": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/adapters": "4.9.0",
"@cornerstonejs/ai": "4.9.0",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/labelmap-interpolation": "4.9.0",
"@cornerstonejs/polymorphic-segmentation": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@itk-wasm/morphological-contour-interpolation": "1.1.0",
"@kitware/vtk.js": "32.12.0",
"html2canvas": "1.4.1",

View File

@ -120,6 +120,7 @@ function commandsModule({
}: OhifTypes.Extensions.ExtensionParams): OhifTypes.Extensions.CommandsModule {
const {
viewportGridService,
toolbarService,
toolGroupService,
cineService,
uiDialogService,
@ -159,6 +160,25 @@ function commandsModule({
};
}
function _handleBrushSizeAction(action: 'increase' | 'decrease') {
const toolGroupIds = toolGroupService.getToolGroupIds();
if (!toolGroupIds?.length) {
return;
}
for (const toolGroupId of toolGroupIds) {
const brushSize = segmentationUtils.getBrushSizeForToolGroup(toolGroupId);
const newBrushSize = action === 'increase' ? brushSize + 3 : brushSize - 3;
if (brushSize) {
segmentationUtils.setBrushSizeForToolGroup(toolGroupId, newBrushSize);
toolbarService.refreshToolbarState({ toolGroupId });
}
}
}
const actions = {
jumpToMeasurementViewport: ({ annotationUID, measurement }) => {
cornerstoneTools.annotation.selection.setAnnotationSelected(annotationUID, true);
@ -2025,17 +2045,11 @@ function commandsModule({
segmentAI.initViewport(viewport);
}
},
setBrushSize: ({ value, toolNames }) => {
setBrushSize: ({ value }) => {
const brushSize = Number(value);
toolGroupService.getToolGroupIds()?.forEach(toolGroupId => {
if (toolNames?.length === 0) {
segmentationUtils.setBrushSizeForToolGroup(toolGroupId, brushSize);
} else {
toolNames?.forEach(toolName => {
segmentationUtils.setBrushSizeForToolGroup(toolGroupId, brushSize, toolName);
});
}
segmentationUtils.setBrushSizeForToolGroup(toolGroupId, brushSize);
});
},
setThresholdRange: ({
@ -2064,26 +2078,10 @@ function commandsModule({
}
},
increaseBrushSize: () => {
const toolGroupIds = toolGroupService.getToolGroupIds();
if (!toolGroupIds?.length) {
return;
}
for (const toolGroupId of toolGroupIds) {
const brushSize = segmentationUtils.getBrushSizeForToolGroup(toolGroupId);
segmentationUtils.setBrushSizeForToolGroup(toolGroupId, brushSize + 3);
}
_handleBrushSizeAction('increase');
},
decreaseBrushSize: () => {
const toolGroupIds = toolGroupService.getToolGroupIds();
if (!toolGroupIds?.length) {
return;
}
for (const toolGroupId of toolGroupIds) {
const brushSize = segmentationUtils.getBrushSizeForToolGroup(toolGroupId);
segmentationUtils.setBrushSizeForToolGroup(toolGroupId, brushSize - 3);
}
_handleBrushSizeAction('decrease');
},
addNewSegment: () => {
const { segmentationService } = servicesManager.services;

View File

@ -32,8 +32,8 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@ohif/core": "3.12.0-beta.80",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.80",
"@ohif/extension-default": "3.12.0-beta.80",

View File

@ -42,8 +42,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@ohif/core": "3.12.0-beta.80",
"@ohif/extension-cornerstone": "3.12.0-beta.80",
"@ohif/extension-default": "3.12.0-beta.80",

View File

@ -0,0 +1,2 @@
export const MIN_SEGMENTATION_DRAWING_RADIUS = 0.5;
export const MAX_SEGMENTATION_DRAWING_RADIUS = 99.5;

View File

@ -1,3 +1,5 @@
import { MIN_SEGMENTATION_DRAWING_RADIUS, MAX_SEGMENTATION_DRAWING_RADIUS } from './constants';
const colours = {
'viewport-0': 'rgb(200, 0, 0)',
'viewport-1': 'rgb(200, 200, 0)',
@ -32,6 +34,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'FILL_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -48,6 +52,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'ERASE_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -55,6 +61,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'FILL_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -62,6 +70,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'ERASE_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -69,6 +79,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -76,6 +88,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -83,6 +97,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
threshold: {
isDynamic: true,
dynamicRadius: 3,
@ -100,6 +116,8 @@ function createTools({ utilityModule, commandsManager }) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
threshold: {
isDynamic: true,
dynamicRadius: 3,

View File

@ -2,6 +2,8 @@ import type { Button } from '@ohif/core/types';
import { ViewportGridService } from '@ohif/core';
import i18n from 'i18next';
import { MIN_SEGMENTATION_DRAWING_RADIUS, MAX_SEGMENTATION_DRAWING_RADIUS } from './constants';
const setToolActiveToolbar = {
commandName: 'setToolActiveToolbar',
commandOptions: {
@ -651,6 +653,10 @@ const toolbarButtons: Button[] = [
toolNames: ['CircularBrush', 'SphereBrush'],
disabledText: i18n.t('Buttons:Create new segmentation to enable this tool.'),
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
radiusOptionId: 'brush-radius',
},
{
name: 'evaluate.cornerstone.hasSegmentationOfType',
segmentationRepresentationType: 'Labelmap',
@ -667,8 +673,9 @@ const toolbarButtons: Button[] = [
name: 'Radius (mm)',
id: 'brush-radius',
type: 'range',
min: 0.5,
max: 99.5,
explicitRunOnly: true,
min: MIN_SEGMENTATION_DRAWING_RADIUS,
max: MAX_SEGMENTATION_DRAWING_RADIUS,
step: 0.5,
value: 25,
commands: [
@ -894,6 +901,10 @@ const toolbarButtons: Button[] = [
name: 'evaluate.cornerstone.segmentation',
toolNames: ['CircularEraser', 'SphereEraser'],
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
radiusOptionId: 'eraser-radius',
},
{
name: 'evaluate.cornerstone.hasSegmentationOfType',
segmentationRepresentationType: 'Labelmap',
@ -904,8 +915,9 @@ const toolbarButtons: Button[] = [
name: 'Radius (mm)',
id: 'eraser-radius',
type: 'range',
min: 0.5,
max: 99.5,
explicitRunOnly: true,
min: MIN_SEGMENTATION_DRAWING_RADIUS,
max: MAX_SEGMENTATION_DRAWING_RADIUS,
step: 0.5,
value: 25,
commands: {
@ -949,6 +961,10 @@ const toolbarButtons: Button[] = [
'ThresholdSphereBrushDynamic',
],
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
radiusOptionId: 'threshold-radius',
},
{
name: 'evaluate.cornerstone.hasSegmentationOfType',
segmentationRepresentationType: 'Labelmap',
@ -960,14 +976,14 @@ const toolbarButtons: Button[] = [
segmentationRepresentationType: 'Labelmap',
},
},
options: [
{
name: 'Radius (mm)',
id: 'threshold-radius',
type: 'range',
min: 0.5,
max: 99.5,
explicitRunOnly: true,
min: MIN_SEGMENTATION_DRAWING_RADIUS,
max: MAX_SEGMENTATION_DRAWING_RADIUS,
step: 0.5,
value: 25,
commands: {

View File

@ -0,0 +1,2 @@
export const MIN_SEGMENTATION_DRAWING_RADIUS = 0.5;
export const MAX_SEGMENTATION_DRAWING_RADIUS = 99.5;

View File

@ -1,3 +1,5 @@
import { MIN_SEGMENTATION_DRAWING_RADIUS, MAX_SEGMENTATION_DRAWING_RADIUS } from './constants';
export const toolGroupIds = {
CT: 'ctToolGroup',
PT: 'ptToolGroup',
@ -61,6 +63,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'FILL_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -68,6 +72,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'ERASE_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -75,6 +81,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'FILL_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -82,6 +90,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'ERASE_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -89,6 +99,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -96,6 +108,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
parentTool: 'Brush',
configuration: {
activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
{
@ -110,6 +124,8 @@ function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) {
isDynamic: true,
dynamicRadius: 3,
},
minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
},
},
],

View File

@ -1,6 +1,8 @@
import { toolGroupIds } from './initToolGroups';
import i18n from 'i18next';
import { MIN_SEGMENTATION_DRAWING_RADIUS, MAX_SEGMENTATION_DRAWING_RADIUS } from './constants';
const setToolActiveToolbar = {
commandName: 'setToolActiveToolbar',
commandOptions: {
@ -205,18 +207,25 @@ const toolbarButtons = [
props: {
icon: 'icon-tool-brush',
label: i18n.t('Buttons:Brush'),
evaluate: {
name: 'evaluate.cornerstone.segmentation',
toolNames: ['CircularBrush', 'SphereBrush'],
disabledText: i18n.t('Buttons:Create new segmentation to enable this tool.'),
},
evaluate: [
{
name: 'evaluate.cornerstone.segmentation',
toolNames: ['CircularBrush', 'SphereBrush'],
disabledText: i18n.t('Buttons:Create new segmentation to enable this tool.'),
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
radiusOptionId: 'brush-radius',
},
],
options: [
{
name: 'Radius (mm)',
id: 'brush-radius',
type: 'range',
min: 0.5,
max: 99.5,
explicitRunOnly: true,
min: MIN_SEGMENTATION_DRAWING_RADIUS,
max: MAX_SEGMENTATION_DRAWING_RADIUS,
step: 0.5,
value: 25,
commands: {
@ -244,17 +253,24 @@ const toolbarButtons = [
props: {
icon: 'icon-tool-eraser',
label: i18n.t('Buttons:Eraser'),
evaluate: {
name: 'evaluate.cornerstone.segmentation',
toolNames: ['CircularEraser', 'SphereEraser'],
},
evaluate: [
{
name: 'evaluate.cornerstone.segmentation',
toolNames: ['CircularEraser', 'SphereEraser'],
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
radiusOptionId: 'eraser-radius',
},
],
options: [
{
name: 'Radius (mm)',
id: 'eraser-radius',
type: 'range',
min: 0.5,
max: 99.5,
explicitRunOnly: true,
min: MIN_SEGMENTATION_DRAWING_RADIUS,
max: MAX_SEGMENTATION_DRAWING_RADIUS,
step: 0.5,
value: 25,
commands: {
@ -282,17 +298,24 @@ const toolbarButtons = [
props: {
icon: 'icon-tool-threshold',
label: i18n.t('Buttons:Threshold Tool'),
evaluate: {
name: 'evaluate.cornerstone.segmentation',
toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'],
},
evaluate: [
{
name: 'evaluate.cornerstone.segmentation',
toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'],
},
{
name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
radiusOptionId: 'threshold-radius',
},
],
options: [
{
name: 'Radius (mm)',
id: 'threshold-radius',
type: 'range',
min: 0.5,
max: 99.5,
explicitRunOnly: true,
min: MIN_SEGMENTATION_DRAWING_RADIUS,
max: MAX_SEGMENTATION_DRAWING_RADIUS,
step: 0.5,
value: 25,
commands: {

View File

@ -34,8 +34,8 @@
},
"dependencies": {
"@babel/runtime": "7.28.2",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/tools": "4.5.20",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/tools": "4.9.0",
"@ohif/core": "3.12.0-beta.80",
"@ohif/extension-cornerstone-dicom-sr": "3.12.0-beta.80",
"@ohif/extension-ultrasound-pleura-bline": "3.12.0-beta.80",

View File

@ -53,7 +53,7 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/dicom-image-loader": "4.5.20",
"@cornerstonejs/dicom-image-loader": "4.9.0",
"@emotion/serialize": "1.3.3",
"@ohif/core": "3.12.0-beta.80",
"@ohif/extension-cornerstone": "3.12.0-beta.80",

View File

@ -37,8 +37,8 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2",
"@cornerstonejs/codec-openjpeg": "1.3.0",
"@cornerstonejs/codec-openjph": "2.4.7",
"@cornerstonejs/core": "4.5.20",
"@cornerstonejs/dicom-image-loader": "4.5.20",
"@cornerstonejs/core": "4.9.0",
"@cornerstonejs/dicom-image-loader": "4.9.0",
"@ohif/ui": "3.12.0-beta.80",
"cornerstone-math": "0.1.9",
"dicom-parser": "1.8.21"

View File

@ -2,7 +2,7 @@ import { CommandsManager } from '../../classes';
import { ExtensionManager } from '../../extensions';
import { PubSubService } from '../_shared/pubSubServiceInterface';
import type { RunCommand } from '../../types/Command';
import { Button, ButtonProps, EvaluateFunction, EvaluatePublic } from './types';
import { Button, ButtonOptions, ButtonProps, EvaluateFunction, EvaluatePublic } from './types';
const EVENTS = {
TOOL_BAR_MODIFIED: 'event::toolBarService:toolBarModified',
@ -592,7 +592,7 @@ export default class ToolbarService extends PubSubService {
const { id: buttonId, props: componentProps } = btn;
const createEnhancedOptions = (options, itemId) => {
const createEnhancedOptions = (options: ButtonOptions[], itemId) => {
const optionsToUse = Array.isArray(options) ? options : [options];
const toolProps = this.getButtonProps(itemId);
@ -833,4 +833,14 @@ export default class ToolbarService extends PubSubService {
return { align: 'start', side: 'bottom' };
}
}
/**
* Retrieves an option by its ID from a button's options array.
* @param button - The button object.
* @param optionId - The ID of the option to retrieve.
* @returns The option with the specified ID.
*/
public getOptionById(button: Button, optionId: string) {
return button.props.options?.find(option => option.id === optionId);
}
}

View File

@ -40,6 +40,7 @@ export type ButtonOptions = {
max?: number;
step?: number;
value?: number | number[] | string;
values: Array<{ value: string; label: string }>;
commands?: RunCommand;
condition?: (props: Record<string, unknown>) => boolean;
children?: React.ReactNode | (() => React.ReactNode);
@ -50,6 +51,7 @@ export type ButtonOptions = {
export type ButtonProps = {
id: string;
icon: string;
isActive?: boolean;
label: string;
tooltip?: string;
commands?: RunCommand;

View File

@ -34,8 +34,7 @@ The `ToolBarService` is a straightforward service designed to handle the toolbar
- `setButtons`: sets the buttons defined in the service. It overrides all the
previous buttons
- `getOptionById(button, optionId)`: from inside a given button, will search through its props and grab the one with the given optionId
## Button Definitions

View File

@ -0,0 +1,95 @@
import { test, expect } from 'playwright-test-coverage';
import { Page } from '@playwright/test';
import { visitStudy, checkForScreenshot, screenShotPaths } from './utils';
import { press } from './utils/keyboardUtils';
test.beforeEach(async ({ page }) => {
const studyInstanceUID = '1.3.12.2.1107.5.2.32.35162.30000015050317233592200000046';
const mode = 'segmentation';
await visitStudy(page, studyInstanceUID, mode, 2000);
await page.getByTestId('panelSegmentationWithToolsLabelMap-btn').click();
await page.getByTestId('addSegmentation').click();
await page.waitForTimeout(500);
});
async function performDrawingToolInteraction(page: Page, toolName: string) {
const brushRadiusInput = page.getByTestId(`${toolName}-radius`).locator('input');
const viewportGrid = page.getByTestId('viewport-grid');
const circle = viewportGrid.locator('svg.svg-layer circle').first();
await expect(brushRadiusInput).toHaveValue('25');
await viewportGrid.click({ position: { x: 275, y: 300 } });
let radius = parseFloat(await circle.getAttribute('r'));
expect(radius).toBeGreaterThanOrEqual(65);
expect(radius).toBeLessThanOrEqual(68);
await page.waitForTimeout(500);
await press({ page, key: '[', nTimes: 2 });
await expect(brushRadiusInput).toHaveValue('19');
await viewportGrid.click({ position: { x: 500, y: 300 } });
radius = parseFloat(await circle.getAttribute('r'));
expect(radius).toBeGreaterThanOrEqual(49);
expect(radius).toBeLessThanOrEqual(52);
await page.waitForTimeout(500);
await press({ page, key: ']', nTimes: 5 });
await expect(brushRadiusInput).toHaveValue('34');
await viewportGrid.click({ position: { x: 275, y: 500 } });
radius = parseFloat(await circle.getAttribute('r'));
expect(radius).toBeGreaterThanOrEqual(87);
expect(radius).toBeLessThanOrEqual(90);
await page.waitForTimeout(500);
await brushRadiusInput.fill('42');
await viewportGrid.click({ position: { x: 500, y: 500 } });
radius = parseFloat(await circle.getAttribute('r'));
expect(radius).toBeGreaterThanOrEqual(108);
expect(radius).toBeLessThanOrEqual(111);
await page.waitForTimeout(500);
}
test('(shouldUpdateThis) should resize segmentation brush tool', async ({ page }) => {
await page.getByTestId('Brush-btn').click();
await performDrawingToolInteraction(page, 'brush');
await checkForScreenshot(
page,
page.getByTestId('viewport-grid'),
screenShotPaths.segDrawingToolsResizing.brushTool
);
});
test('(shouldUpdateThis) should resize segmentation eraser tool', async ({ page }) => {
await page.getByTestId('Brush-btn').click();
await page.getByTestId('brush-radius').locator('input').fill('99.5');
await page.getByTestId('viewport-grid').click({ position: { x: 400, y: 400 } });
await page.waitForTimeout(500);
await page.getByTestId('Eraser-btn').click();
await page.getByTestId('eraser-radius').locator('input').fill('25');
await page.waitForTimeout(500);
await performDrawingToolInteraction(page, 'eraser');
await checkForScreenshot(
page,
page.getByTestId('viewport-grid'),
screenShotPaths.segDrawingToolsResizing.eraserTool
);
});
test('(shouldUpdateThis) should resize segmentation threshold tool', async ({ page }) => {
await page.getByTestId('Threshold-btn').click();
await performDrawingToolInteraction(page, 'threshold');
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

View File

@ -144,6 +144,10 @@ const screenShotPaths = {
segDataOverlayNoHydrationPreMPR: 'segDataOverlayNoHydrationPreMpr.png',
segDataOverlayNoHydrationPostMPR: 'segDataOverlayNoHydrationPostMpr.png',
},
segDrawingToolsResizing: {
brushTool: 'brushTool.png',
eraserTool: 'eraserTool.png',
},
mprThenRTOverlayNoHydration: {
mprPreRTOverlayNoHydration: 'mprPreRTOverlayNoHydration.png',
mprPostRTOverlayNoHydration: 'mprPostRTOverlayNoHydration.png',

View File

@ -1280,10 +1280,10 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@cornerstonejs/adapters@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-4.5.20.tgz#3ed39349f8843babf7fbe56b40eb7b0264894780"
integrity sha512-VamRAnlWoNrb4dKx8UfZBgR3mssei88OMoSaNG9V6g+CZUfpMEuZrinTN7ksph0kZ6h8YgIdfDoSzweTpS7cNA==
"@cornerstonejs/adapters@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-4.9.0.tgz#fb3b4eedb30c9df9dc16174cc387a845b8394685"
integrity sha512-wP5nZQobLe0JHfdftxqOm9901XPnDASDP40nEryKHI/t+8MMKq/XOI4zStkwdInimgaohHR9ppV8Ybuob7Zu4Q==
dependencies:
"@babel/runtime-corejs2" "7.26.10"
buffer "6.0.3"
@ -1291,10 +1291,10 @@
gl-matrix "3.4.3"
ndarray "1.0.19"
"@cornerstonejs/ai@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-4.5.20.tgz#69fde3dc9a61f115cfa4cc2d0dcfa5841ed1113d"
integrity sha512-M+MumfAzEX2U5r0QRifYvYqH3xBf2qaqPNaMprHuzPG0Xh8NR9E4KvpZWdW8Wn04quTBO8O/nJ+H9deGlY0idA==
"@cornerstonejs/ai@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-4.9.0.tgz#60a3cded3bdd0b9c030b0173d71212b4c2012083"
integrity sha512-eS036rfCJ4twK9LpyixUS2UgZ5IfR4A1gA959LyR9jyOY0ol24KeJyvXsZ9eSpbJO8VJ3tJVLwNVAKgjyosnwQ==
dependencies:
"@babel/runtime-corejs2" "7.26.10"
buffer "6.0.3"
@ -1320,7 +1320,7 @@
resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-libjpeg-turbo-8bit/-/codec-libjpeg-turbo-8bit-1.2.2.tgz#ae384b149d6655e3dd6e18b9891fab479ab5e144"
integrity sha512-aAUMK2958YNpOb/7G6e2/aG7hExTiFTASlMt/v90XA0pRHdWiNg5ny4S5SAju0FbIw4zcMnR0qfY+yW3VG2ivg==
"@cornerstonejs/codec-openjpeg@1.2.4", "@cornerstonejs/codec-openjpeg@1.3.0", "@cornerstonejs/codec-openjpeg@^1.2.4":
"@cornerstonejs/codec-openjpeg@1.3.0", "@cornerstonejs/codec-openjpeg@^1.2.4":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjpeg/-/codec-openjpeg-1.3.0.tgz#2e5973f3e207db3d6cf47e34f74010e2f6f0a0bf"
integrity sha512-hP8WAZ63AcaDYmHbBVTY04x424AglXsRHrI6VBdW4eTiJ76f0heWrEodT9Sb3sNwazzYuyMOIZNndJPeVSeHcw==
@ -1330,24 +1330,24 @@
resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.7.tgz#784394d05d8cf735640e9c3baa206535ee8e0376"
integrity sha512-qvP4q4JDib7mi9r7LqKOwqz7YZ8gjtDX4ZCezeYf8+eb7MBXCz5uXAMeVF3yz9Axw4XiIMdB/pqXkm8tqCl13w==
"@cornerstonejs/core@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-4.5.20.tgz#02c89300bf32629ecc5e3deb9053f5ec4118f9f8"
integrity sha512-AWI8GilT9JfCBJywnQwZ5xQZG4EQHujIb4J9VPqyJ/K0ShQ4b7l9kabZ30S6zkimeClntNVVa1Quas7gWPW2LQ==
"@cornerstonejs/core@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-4.9.0.tgz#e3ffe1064a810e8fa7d6af0d5dd3a26be4d625c5"
integrity sha512-Gj8/nhogWg63r4vUSXD4QU8ffAB5AzUcAfNjPYBk7L6yzp42AwBMkuh2zetY1ZSJCgsCImIYpcvH/WLWpZa/9Q==
dependencies:
"@kitware/vtk.js" "32.12.1"
comlink "4.4.2"
gl-matrix "3.4.3"
loglevel "1.9.2"
"@cornerstonejs/dicom-image-loader@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-4.5.20.tgz#be0e640fc546512bda8d43bd6276a666f3de5dda"
integrity sha512-eH4q4ERBlJJsJL9gRWEmCVR96VIxAYV3XIEs9PbRqMs4cfW4AjcupmwuCIbTAVP93LIDXxqN8f2lQXCDjQugjQ==
"@cornerstonejs/dicom-image-loader@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-4.9.0.tgz#6745c9140b075ffeffddd90c5bbda2a9162c55b7"
integrity sha512-IKgpSjGPya/Nhntf6Cy09RafsO9sqDb4EwkoCC8cZ+QFCe4af6sNSIovJjOdREqIgB5iMEsTa8U1foe/slRwlA==
dependencies:
"@cornerstonejs/codec-charls" "1.2.3"
"@cornerstonejs/codec-libjpeg-turbo-8bit" "1.2.2"
"@cornerstonejs/codec-openjpeg" "1.2.4"
"@cornerstonejs/codec-openjpeg" "1.3.0"
"@cornerstonejs/codec-openjph" "2.4.7"
comlink "4.4.2"
dicom-parser "1.8.21"
@ -1355,25 +1355,25 @@
pako "2.1.0"
uuid "9.0.1"
"@cornerstonejs/labelmap-interpolation@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-4.5.20.tgz#e8962f04bc566175369a7cd78c685cc2c2df488b"
integrity sha512-lbVKXloFJk1HFHtFKLSjbchilnE1bfnM/JYlr16HSvlgb1rPd7GPoZFfrn034oowNEfOLjqJ+C35EaaIjSOxxw==
"@cornerstonejs/labelmap-interpolation@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-4.9.0.tgz#946625ae54934318130f683edd7bb0e40620ab8c"
integrity sha512-LrWrXcLh9Gd4FE3hkq74bElGXJjF1izE9SFjvkYIHNUHGuIQiD2oYGlBFALXpjUb4i3B4hfVA0wz55z4Fz2vfg==
dependencies:
"@itk-wasm/morphological-contour-interpolation" "1.1.0"
itk-wasm "1.0.0-b.165"
"@cornerstonejs/polymorphic-segmentation@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-4.5.20.tgz#8fb0eec12f51457c140f93343f94ba870d0fe10c"
integrity sha512-s4es71KDzsrMPchGm5B3lERIF/M+OHMtFZbXAzGcZ8KnZZkmX1j1G6vxakcW8IjXL4knkDuSkZxevFXWIKyMoA==
"@cornerstonejs/polymorphic-segmentation@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-4.9.0.tgz#805d651af4b69c1570dea0134179f75faaa9428c"
integrity sha512-oONftUjfDTfa7ex6zqeUtuPqqeFAATH5dszxiKh4xtoY2AlBhNFjfbhFLdWTa4Y1Lfl9yOWNK1sNZAOA1BnUXQ==
dependencies:
"@icr/polyseg-wasm" "0.4.0"
"@cornerstonejs/tools@4.5.20":
version "4.5.20"
resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-4.5.20.tgz#4e6f2d0dc2ecbee84b1d2d3108abaf9081b2c1f6"
integrity sha512-FY2sxm7vPiCI1Vm1JsHeIYMi45686V8/RkRa47XDt/035B/v36pr81pyE9nl/jb7FJiHfzSyDeROJ8YoPVe9qQ==
"@cornerstonejs/tools@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-4.9.0.tgz#276c84095789cd39afc223a42389c469de253720"
integrity sha512-cUd50Lc85T4OwTXPrBTUjyIKHHe5icxR5N8H6X3NQFfhTsCB11nZLt7530hL2oQZmAleg5u853XbAVzoaa9mjg==
dependencies:
"@types/offscreencanvas" "2019.7.3"
comlink "4.4.2"