diff --git a/extensions/dicom-rt/src/OHIFDicomRTStructSopClassHandler.js b/extensions/dicom-rt/src/OHIFDicomRTStructSopClassHandler.js index 4f624cfa6..88f8402d4 100644 --- a/extensions/dicom-rt/src/OHIFDicomRTStructSopClassHandler.js +++ b/extensions/dicom-rt/src/OHIFDicomRTStructSopClassHandler.js @@ -15,7 +15,7 @@ const OHIFDicomRTStructSopClassHandler = { id: 'OHIFDicomRTStructSopClassHandler', type: MODULE_TYPES.SOP_CLASS_HANDLER, sopClassUIDs, - getDisplaySetFromSeries: function( + getDisplaySetFromSeries: function ( series, study, dicomWebClient, @@ -71,11 +71,11 @@ const OHIFDicomRTStructSopClassHandler = { } } - rtStructDisplaySet.getSourceDisplaySet = function(studies) { + rtStructDisplaySet.getSourceDisplaySet = function (studies) { return getSourceDisplaySet(studies, rtStructDisplaySet); }; - rtStructDisplaySet.load = function(referencedDisplaySet, studies) { + rtStructDisplaySet.load = function (referencedDisplaySet, studies) { return loadRTStruct( rtStructDisplaySet, referencedDisplaySet, diff --git a/extensions/dicom-rt/src/components/RTPanel/RTPanel.js b/extensions/dicom-rt/src/components/RTPanel/RTPanel.js index 504089a04..5d9c9b98b 100644 --- a/extensions/dicom-rt/src/components/RTPanel/RTPanel.js +++ b/extensions/dicom-rt/src/components/RTPanel/RTPanel.js @@ -79,6 +79,8 @@ const RTPanel = ({ * without subscribing to external events. */ useEffect(() => { + updateStructureSets(); + document.addEventListener('extensiondicomrtrtloaded', updateStructureSets); return () => { diff --git a/extensions/dicom-rt/src/loadRTStruct.js b/extensions/dicom-rt/src/loadRTStruct.js index 42fd24d5c..a5323b7f2 100644 --- a/extensions/dicom-rt/src/loadRTStruct.js +++ b/extensions/dicom-rt/src/loadRTStruct.js @@ -96,6 +96,11 @@ export default async function loadRTStruct( imageIdSopInstanceUidPairs ); const imageId = _getImageId(imageIdSopInstanceUidPairs, sopInstanceUID); + + if (!imageId) { + continue; + } + const imageIdSpecificToolData = _getOrCreateImageIdSpecificToolData( toolState, imageId, @@ -294,7 +299,7 @@ const _getImageId = (imageIdSopInstanceUidPairs, sopInstanceUID) => { imageIdSopInstanceUidPairsEntry.sopInstanceUID === sopInstanceUID ); - return imageIdSopInstanceUidPairsEntry.imageId; + return imageIdSopInstanceUidPairsEntry ? imageIdSopInstanceUidPairsEntry.imageId : null; }; function _getImageIdSopInstanceUidPairsForDisplaySet( diff --git a/extensions/vtk/src/toolbarComponents/VTKMPRToolbarButton.js b/extensions/vtk/src/toolbarComponents/VTKMPRToolbarButton.js index 7f90fcd71..7486b9b77 100644 --- a/extensions/vtk/src/toolbarComponents/VTKMPRToolbarButton.js +++ b/extensions/vtk/src/toolbarComponents/VTKMPRToolbarButton.js @@ -41,14 +41,17 @@ const _isDisplaySetReconstructable = (viewportSpecificData = {}, activeViewportI // A better heuristic would be checking 4D tags, e.g. the presence of multiple TemporalPositionIdentifier values. // However, some studies (e.g. https://github.com/OHIF/Viewers/issues/2113) do not have such tags. - for (let ii = 0; ii < displaySet.numImageFrames; ++ii){ - const imageIdControl = displaySet.images[ii].getImageId() + for (let ii = 0; ii < displaySet.numImageFrames; ++ii) { + const image = displaySet.images[ii]; + if (!image) continue; + + const imageIdControl = image.getImageId() const instanceMetadataControl = cornerstone.metaData.get('instance', imageIdControl) if (!instanceMetadataControl || instanceMetadataControl === undefined || !instanceMetadataControl.ImagePositionPatient || - instanceMetadataControl.ImagePositionPatient === undefined ) { + instanceMetadataControl.ImagePositionPatient === undefined) { // if ImagePositionPatient is missing, skip the 4D datasets check. // do not return false, because it could be a 3D dataset. continue; @@ -58,8 +61,11 @@ const _isDisplaySetReconstructable = (viewportSpecificData = {}, activeViewportI let yImagePositionPatientControl = instanceMetadataControl.ImagePositionPatient[1]; let zImagePositionPatientControl = instanceMetadataControl.ImagePositionPatient[2]; - for (let jj = ii + 1; jj < displaySet.numImageFrames; ++jj){ - const imageId = displaySet.images[jj].getImageId() + for (let jj = ii + 1; jj < displaySet.numImageFrames; ++jj) { + const image = displaySet.images[jj]; + if (!image) continue; + + const imageId = image.getImageId() const instanceMetadata = cornerstone.metaData.get('instance', imageId) if (!instanceMetadata || @@ -76,8 +82,8 @@ const _isDisplaySetReconstructable = (viewportSpecificData = {}, activeViewportI let zImagePositionPatient = instanceMetadata.ImagePositionPatient[2]; if (xImagePositionPatientControl === xImagePositionPatient && - yImagePositionPatientControl === yImagePositionPatient && - zImagePositionPatientControl === zImagePositionPatient){ + yImagePositionPatientControl === yImagePositionPatient && + zImagePositionPatientControl === zImagePositionPatient) { return false; } }