Skip to content

Commit

Permalink
IDC2361: fix seg combobox filling
Browse files Browse the repository at this point in the history
  • Loading branch information
Punzo committed Apr 19, 2021
1 parent d2e75b0 commit e41ba2b
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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(
Expand Down Expand Up @@ -129,7 +129,6 @@ export default function getSopClassHandlerModule({ servicesManager }) {
}
};

segDisplaySet.isLoading = false;
return segDisplaySet;
},
};
Expand Down
43 changes: 35 additions & 8 deletions extensions/dicom-segmentation/src/getSourceDisplaySet.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -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 =>
Expand Down
10 changes: 4 additions & 6 deletions extensions/dicom-segmentation/src/utils/setActiveLabelMap.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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();
Expand Down
27 changes: 21 additions & 6 deletions platform/core/src/classes/metadata/StudyMetadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ export class StudyMetadata extends Metadata {
referencedFrameOfReferenceUID,
} = filter;

let tempReferencedFrameOfReferenceUID = referencedFrameOfReferenceUID;
let filteredDerivedDisplaySets = this._derivedDisplaySets;

if (Modality) {
Expand All @@ -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;
Expand All @@ -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.SeriesInstanceUID ===
referencedSeriesInstanceUID
);

if (referencedDisplaySets[0]) {
tempReferencedFrameOfReferenceUID = referencedDisplaySets[0].images[0]._study.FrameOfReferenceUID
}
}

if (tempReferencedFrameOfReferenceUID) {
finalDerivedDisplaySets = filteredDerivedDisplaySets.filter(
displaySet =>
displaySet.ReferencedFrameOfReferenceUID ===
referencedFrameOfReferenceUID
displaySet.FrameOfReferenceUID ===
tempReferencedFrameOfReferenceUID
);
}

return filteredDerivedDisplaySets;
return finalDerivedDisplaySets;
}

/**
Expand Down
4 changes: 2 additions & 2 deletions platform/core/src/utils/loadAndCacheDerivedDisplaySets.js
Original file line number Diff line number Diff line change
Expand Up @@ -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:',
Expand Down
4 changes: 4 additions & 0 deletions platform/viewer/src/connectedComponents/Viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit e41ba2b

Please sign in to comment.