From e0289dc49f52e7ee6f0642f01de3ae31cddf71e0 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Tue, 15 Jul 2025 09:02:36 -0400 Subject: [PATCH] fix(segmentation): Removed LOAD/hydrate button for segmentation overlays (#5214) --- .../viewports/OHIFCornerstoneRTViewport.tsx | 1 - .../ModalityLoadBadge/ModalityLoadBadge.tsx | 11 +++++++---- package.json | 4 ++-- tests/DataOverlayMenu.spec.ts | 12 ++++++++++++ tests/MPRThenRTOverlayNoHydration.spec.ts | 4 ++++ tests/MPRThenSEGOverlayNoHydration.spec.ts | 8 ++++++++ .../MultipleSegmentationDataOverlays.spec.ts | 13 +++++++++++++ ...rUnreferencedDisplaySetNoHydration.spec.ts | 8 ++++++++ tests/RTDataOverlayNoHydrationThenMPR.spec.ts | 7 +++++++ ...rUnreferencedDisplaySetNoHydration.spec.ts | 8 ++++++++ .../SEGDataOverlayNoHydrationThenMPR.spec.ts | 11 +++++++++++ .../overlay2d-tta-nnU-Net-Segmentation.png | Bin 214185 -> 199003 bytes ...ith2d-tta-nnU-Net-SegmentationSelected.png | Bin 193593 -> 192623 bytes .../overlayMenuWithSegmentationSelected.png | Bin 204899 -> 191779 bytes .../overlaySegmentation.png | Bin 213552 -> 198695 bytes .../mprPostRTOverlayNoHydration.png | Bin 191754 -> 160644 bytes .../mprPostSEGOverlayNoHydration.png | Bin 262577 -> 254333 bytes .../overlaySEGsAndRTDisplayed.png | Bin 229690 -> 214395 bytes .../overlaysDisplayed.png | Bin 213127 -> 197868 bytes .../threeSegOverlaysInOverlayMenu.png | Bin 193558 -> 179402 bytes .../overlayFirstImage.png | Bin 144377 -> 141680 bytes .../overlayMiddleImage.png | Bin 148607 -> 145285 bytes .../rtDataOverlayNoHydrationPostMpr.png | Bin 178875 -> 158346 bytes .../rtDataOverlayNoHydrationPreMpr.png | Bin 98595 -> 91757 bytes .../overlayFirstImage.png | Bin 204741 -> 179322 bytes .../overlayMiddleImage.png | Bin 181146 -> 158205 bytes .../segDataOverlayNoHydrationPostMpr.png | Bin 262091 -> 254374 bytes .../segDataOverlayNoHydrationPreMpr.png | Bin 280358 -> 284092 bytes tests/utils/assertions.ts | 15 +++++++++++++++ 29 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 tests/utils/assertions.ts diff --git a/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx b/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx index 59bfda9b4..32f37970a 100644 --- a/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx +++ b/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx @@ -41,7 +41,6 @@ function OHIFCornerstoneRTViewport(props: withAppTypes) { const [{ viewports, activeViewportId }, viewportGridService] = useViewportGrid(); // States - const selectedSegmentObjectIndex: number = 0; const { setPositionPresentation } = usePositionPresentationStore(); const [rtIsLoading, setRtIsLoading] = useState(!rtDisplaySet.isLoaded); const [processingProgress, setProcessingProgress] = useState({ diff --git a/extensions/cornerstone/src/components/ModalityLoadBadge/ModalityLoadBadge.tsx b/extensions/cornerstone/src/components/ModalityLoadBadge/ModalityLoadBadge.tsx index 530e17041..1b51409c5 100644 --- a/extensions/cornerstone/src/components/ModalityLoadBadge/ModalityLoadBadge.tsx +++ b/extensions/cornerstone/src/components/ModalityLoadBadge/ModalityLoadBadge.tsx @@ -17,13 +17,13 @@ function ModalityLoadBadge({ viewportId }: { viewportId: string }) { const { isTracked, isLocked } = useMeasurementTracking({ viewportId }); - const { backgroundDisplaySet, overlayDisplaySets } = useViewportDisplaySets(viewportId); + const { backgroundDisplaySet } = useViewportDisplaySets(viewportId); const [specialDisplaySet, setSpecialDisplaySet] = useState(null); const allDisplaySets = useMemo(() => { - return [backgroundDisplaySet, ...overlayDisplaySets].filter(Boolean); - }, [backgroundDisplaySet, overlayDisplaySets]); + return [backgroundDisplaySet].filter(Boolean); + }, [backgroundDisplaySet]); useEffect(() => { const displaySet = allDisplaySets.find(ds => ds.isOverlayDisplaySet || ds?.Modality === 'SR'); @@ -120,7 +120,10 @@ function ModalityLoadBadge({ viewportId }: { viewportId: string }) { const StatusArea = () => { if (!statusInfo.isHydrated) { return ( -
=lw?-BY
zTatf&aepiQQ{bDV)0bVKeP@PMx3{QA#PnqHu=P&L$neUJp3_p+uT3J*aD1&z0Y{<1
z-C+s)>D4k=FrvNbQ9Wxx%3!syTb<2@LyMkH&gTxJj7#NNbK`^Q`H5w5s#|*T_AKed
zvASQ);L6IIWdQT*WZfi-8bDQQsw1XS)wQxUWDQIU50AAUa=2M2MpSmETbSU%_|l_2
zElD0Z3L {e2^U7}Sui4#kzzwW*
zQ`I++2t-cj*Hd+9qLSE!y$!Zh3{WyEg6Dq>?e9^;mFYEKa4D+4*7OC0UM<`mLQ0U-
zOwN%f8HbKEa)&$s!XWZ)3p+KThzJrNjJb_9`wX7Ob>Pm`_WqC7 e=8<#$iAmoKtT)la
zu877;|K^@5#ny}XI;)#msOOhqzwcWjQMJ3S13EVzdlsyxI%ljES6#Jw1F7sEv7SUX
zG6cy%N861f2BOQVTK8S=`q$2PDr_6y5er|`+0NRWu1OwiKWeg`aW*NWkqnJ^k8YT7
zw=t@pu)XET?7fi{PQYsx^2Gx>S+VVS?apJ+B%E4wV < v7Mq`vE~7b9@V!EWK^qGhua`)&!o2pidjyox}sI77V)L;4yO&;
zydbb9JCo7B!C>kERV*v${E|_CMg`pHC?0LIL;?4nKIcu|vu=HAA`d-zLI)>^jdb+S
zEiQQRlP-SPD-QN;1l8QZ)Qi2f50M&$0TTc@7T&4I_}qfw+e{tJFR6>+>C-#MT46$4
z0)a|>m9R( C_?aqiCBu$;
zg1xlr(1Jtn@0G({6EQJpZowwf-g_mqrCmJla}KkJg4Y8~A0lxQ4rA}@4MeSapOu9j
z!6gX9S%aN#M>;a(p*6P$`^5rttcG)KOwgJRvxZkahVJeD7n$7{kI!n_S2;!UEL|O>
zH9t=1a!D%<$lRZMAFN>GV=5)&d-}YkkSrfOBPOqy>&+;d4Y1o9a~mjo*+JeZohvwd
zQ8%`eTA+p$*@XAQQj9DzDhf#V)v2~w|D5@p8Wp8vWmVYN=o1jo9v&`F`h-tvr8oHl
z-NELD(x6@m3ZI?5JtY-YZ&v8bnrkFwQVg74G~1zLKxTr3p(X|uahgP0BL_uni@FkB
z(z~<#Wk+&zb2m;zP_ddrGPARXz1WOw_~@WR-}_&DUw)kmPEMUWbBY3a%`moNDoE_+
z8?lPOX&CX&~pa*^^Vhpuj6w0HPjcF~p
zWDo#A>O2I8j_!UP>%5&>5c%9xtAeUby!cUoFZKTDL`~(3u+N=?WpbtN1IIe6JJ&9y
zth@5wnBvWu&r^2CRcXH)S&V?=NG@5{%7Hp>ER&w^CwlI1^i=5`p=6-|Jmj$VIh3I^
zq9eamXq`l3r`rh>wP!|!+bq(mWJmh?8cP9&ZNRnP0<7|)4
zu(I0;(Y*DD@{2D%Cee_V^sg*G#@+6P3}wHjkpb~C?|7TYD^8wI#!2On$9d`Lr&oL(
zGb-roydze4?sYpy+64DHOxbGS!=xkX$Wl&vwYfWLzZ@@t4-J@=i*m~w`AYss`*}uD
zHhxVdss1t*S8}}b`MfK#>oXHBdla~(+{fTY(--RemqtwnDDkJp1K}`dk5irhVgbd*
zCUPIk1efo0#1*Nf^LA*_N~jpQ4eH{uOw28I0c9wONe|RS7~+q!!(Rm$+S)zVFgjj*
zql{o^m7yulTkF2NARDweu5J73%WrR7@KFDp`uSjKSR%lu^M&Eky3aCo+Itx0>F95O
zLyz_)SIW=IQ69293^Ku6*E7z6fhB}G<__cIr`7$}p;zR0+O(OJ6+tXRLFLr-`~{41
z`Z^jXk*bx^%BUq~u>)Id&-bRf&L7=Vr7ug?ry#GVkS@JAp6WRbsHR5F<#xZi{rYaa
z40=w^(fB1Qmympj#jlJb4mz!}fPUziL5A0JG}gsYA0}%g`o75u=d4YiRF0guAs<%(
z1^uzJ0y%NBOoCE#$E9Ib696?afyW+|Ujf^sbL2HD5+G99sNdIT!$%{gK!PKF~Xcv2Q}>
k~w-~95Z{OWr?pZ5Ohxv%S`(fgjPpm+Psmij=?>M|JI
ziK6w+bqt1{W?#ceEHJ_F^|ZfS;W6Lq_rIaqx^8KR5HS5ZG#KsZ^KEi$#MRyoW!J)T
z31|PTQeO~o6j%kpPM(KleXH-#F9-p_&=Rju
zQd0A<{FPud4Q$
B7-4R)a4=-Id
znr_ab8kNuup7VQj&>;~o@WKY{E(1)KY|MbYyib;DiHTLP$#H7dLImcn4Xj;#rg(74
zK+CRGd1w$bdy~+vJ>)``78BUK
=iE8*1oxw0H$
30o)9lzY@Eh{%}AT^mStfk80vI}NDrl{(FQejh3qS5
zWZGLmSPv-1VUSe?L}mf;m_0a~=~Q$Y%Ms1fNvc1h^M5CCa-isk&s~#a3Pk*cca!7;
zN@G>0&J(r*r$hqY!YVo_
{U;oLL!
z-A$a4XC}mR4NZ9lZGD29{n@oBuW%qdKLy%=eoAp)v2fcWj#UGn
zuaq9n)4LI75S+N+va^r|W+xt!{r&v^(m^?pzU~-hCLiX}&2yv-rHwN<%9jPFe8_S*U!HIIW0|n)a0@`
z3vj)FqlLdgJq56djF~$+HD-=Iq6*);2eO5oB`@Pmo?!)fw#7x5LY>(-RO9}adS*GE
z6<7U9bo=PUHH{hVVBu$%gefrla>a^JVy)=EZ>{bTE(4j}Zcr@;C%t9+k8ce-k(j4h
zXwCOfuYoWs65eUf_t|2A)QQshAjri^<9Z*IVnTAW$q{Qb9=2dHu
m8E`(s}`jEPx$KbipnZT9|##7}3y?cO)k
z_Kx+{1vO*8{3Of_5+COIDKZA6P8`Hl2|Fgz4F
RKT?`H>
zi^
v6
zsrEIV`dux-!U?Wrkl+C8v{e`7RcF71CiL(IPE@uZ*yROc_x}J5{K(JZ<=+ubH<|T?
z6l|YkVQJ;BW$S