IDC2361: fix seg combobox filling

This commit is contained in:
Davide Punzo 2021-04-19 14:53:38 +02:00
parent d2e75b0f20
commit e41ba2bfde
7 changed files with 68 additions and 25 deletions

View File

@ -298,7 +298,7 @@ const SegmentationPanel = ({
);
const filteredReferencedSegDisplaysets = referencedSegDisplaysets.filter(
(segDisplay => segDisplay.loadError !== true && segDisplay.isLoaded));
(segDisplay => segDisplay.loadError !== true));
return filteredReferencedSegDisplaysets.map((displaySet, index) => {
const {

View File

@ -55,6 +55,7 @@ export default function getSopClassHandlerModule({ servicesManager }) {
referencedDisplaySetUID: null, // Assigned when loaded.
labelmapIndex: null, // Assigned when loaded.
isLoaded: false,
loadError: false,
hasOverlapping: false,
SeriesDate,
SeriesTime,
@ -68,7 +69,6 @@ export default function getSopClassHandlerModule({ servicesManager }) {
};
segDisplaySet.load = async function(referencedDisplaySet, studies) {
segDisplaySet.isLoading = true;
segDisplaySet.isLoaded = true;
const { StudyInstanceUID } = referencedDisplaySet;
const segArrayBuffer = await DicomLoaderService.findDicomDataPromise(
@ -129,7 +129,6 @@ export default function getSopClassHandlerModule({ servicesManager }) {
}
};
segDisplaySet.isLoading = false;
return segDisplaySet;
},
};

View File

@ -36,14 +36,32 @@ const _getReferencedDisplaySet = (segDisplaySet, studies) => {
referencedSeriesInstanceUIDs = ReferencedSeriesSequence.map(
ReferencedSeries => ReferencedSeries.SeriesInstanceUID
);
} else {
const { PerFrameFunctionalGroupsSequence } = metadata;
}
if (metadata.ReferencedImageSequence &&
(!referencedSeriesInstanceUIDs || referencedSeriesInstanceUIDs.length === 0)) {
const referencedImageArray = _toArray(metadata.ReferencedImageSequence);
for (let i = 0; i < referencedImageArray.length; i++) {
const { ReferencedSOPInstanceUID } = referencedImageArray[i];
referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSOPInstanceUID(
otherDisplaySets,
ReferencedSOPInstanceUID
);
if (referencedSeriesInstanceUIDs && referencedSeriesInstanceUIDs.length !== 0) {
break;
}
}
}
if (!referencedSeriesInstanceUIDs || referencedSeriesInstanceUIDs.length === 0) {
let SourceImageSequence;
if (metadata.SourceImageSequence) {
SourceImageSequence = metadata.SourceImageSequence;
} else {
const { PerFrameFunctionalGroupsSequence } = metadata;
const firstFunctionalGroups = _toArray(
PerFrameFunctionalGroupsSequence
)[0];
@ -52,14 +70,23 @@ const _getReferencedDisplaySet = (segDisplaySet, studies) => {
SourceImageSequence = DerivationImageSequence;
}
const firstSourceImage = _toArray(SourceImageSequence)[0];
const sourceImageArray = _toArray(SourceImageSequence);
for (let i = 0; i < sourceImageArray.length; i++) {
const { ReferencedSOPInstanceUID } = sourceImageArray[i];
const { ReferencedSOPInstanceUID } = firstSourceImage;
referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSOPInstanceUID(
otherDisplaySets,
ReferencedSOPInstanceUID
);
referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSOPInstanceUID(
otherDisplaySets,
ReferencedSOPInstanceUID
);
if (referencedSeriesInstanceUIDs && referencedSeriesInstanceUIDs.length !== 0) {
break;
}
}
}
if (!referencedSeriesInstanceUIDs || referencedSeriesInstanceUIDs.length === 0) {
return undefined;
}
const referencedDisplaySet = otherDisplaySets.find(ds =>

View File

@ -47,16 +47,11 @@ export default async function setActiveLabelmap(
return labelmapIndex;
}
if (displaySet.isLoading) {
return activeLabelmapIndex;
}
if (!displaySet.isLoaded) {
try {
await displaySet.load(referencedDisplaySet, studies);
} catch (error) {
displaySet.isLoaded = false;
displaySet.isLoading = false;
displaySet.loadError = true;
onDisplaySetLoadFailure(error);
@ -74,8 +69,11 @@ export default async function setActiveLabelmap(
// This might have just been created, so need to use the non-cached value.
state = cornerstoneTools.getModule('segmentation').state;
brushStackState = state.series[firstImageId];
brushStackState.activeLabelmapIndex = labelmapIndex;
if (brushStackState) {
brushStackState.activeLabelmapIndex = labelmapIndex;
}
refreshViewports();
callback();

View File

@ -241,6 +241,7 @@ export class StudyMetadata extends Metadata {
referencedFrameOfReferenceUID,
} = filter;
let tempReferencedFrameOfReferenceUID = referencedFrameOfReferenceUID;
let filteredDerivedDisplaySets = this._derivedDisplaySets;
if (Modality) {
@ -249,8 +250,9 @@ export class StudyMetadata extends Metadata {
);
}
let finalDerivedDisplaySets;
if (referencedSeriesInstanceUID) {
filteredDerivedDisplaySets = filteredDerivedDisplaySets.filter(
finalDerivedDisplaySets = filteredDerivedDisplaySets.filter(
displaySet => {
if (!displaySet.metadata.ReferencedSeriesSequence) {
return false;
@ -270,15 +272,28 @@ export class StudyMetadata extends Metadata {
);
}
if (referencedFrameOfReferenceUID) {
filteredDerivedDisplaySets = filteredDerivedDisplaySets.filter(
if ((!finalDerivedDisplaySets || finalDerivedDisplaySets.length === 0)
&& !tempReferencedFrameOfReferenceUID) {
const referencedDisplaySets = this._displaySets.filter(
displaySet =>
displaySet.ReferencedFrameOfReferenceUID ===
referencedFrameOfReferenceUID
displaySet.SeriesInstanceUID ===
referencedSeriesInstanceUID
);
if (referencedDisplaySets[0]) {
tempReferencedFrameOfReferenceUID = referencedDisplaySets[0].images[0]._study.FrameOfReferenceUID
}
}
if (tempReferencedFrameOfReferenceUID) {
finalDerivedDisplaySets = filteredDerivedDisplaySets.filter(
displaySet =>
displaySet.FrameOfReferenceUID ===
tempReferencedFrameOfReferenceUID
);
}
return filteredDerivedDisplaySets;
return finalDerivedDisplaySets;
}
/**

View File

@ -106,11 +106,11 @@ async function loadAndCacheDerivedDisplaySets(referencedDisplaySet, studies, log
}
});
recentDisplaySet.isLoading = true;
try {
await recentDisplaySet.load(referencedDisplaySet, studies);
} catch (error) {
recentDisplaySet.isLoaded = false;
recentDisplaySet.loadError = true;
logger.error({ error, message: error.message });
snackbar.show({
title: 'Error loading derived display set:',

View File

@ -434,6 +434,10 @@ const _checkForSeriesInconsistencesWarnings = async function (displaySet, studie
}
const sourceDisplaySet = displaySet.getSourceDisplaySet(studies, false);
if (!sourceDisplaySet) {
return warningsList;
}
const imageIds = sourceDisplaySet.images.map(image => image.getImageId());
if (!imageIds || imageIds.length === 0) {
return warningsList;