fix(segmentation): Changes to fix problems with non hydrated/loaded segmentations to be viewable when switching hanging protocols (e.g. MPR) (#5139)
This commit is contained in:
1 parent
9a81f8cef5
commit
c2624f116d
24 files changed
+199
-47
No files matched your search
@@ -24,7 +24,7 @@ type DisplaySetSelectorState = {
|
||||
/**
|
||||
* Stores a mapping from `<activeStudyUID>:<displaySetSelectorId>:<matchOffset>` to `displaySetInstanceUID`.
|
||||
*/
|
||||
displaySetSelectorMap: Record<string, string>;
|
||||
displaySetSelectorMap: Record<string, Array<string>>;
|
||||
|
||||
/**
|
||||
* Sets the display set selector for a given key.
|
||||
@@ -32,7 +32,7 @@ type DisplaySetSelectorState = {
|
||||
* @param key - The key.
|
||||
* @param value - The `displaySetInstanceUID` to associate with the key.
|
||||
*/
|
||||
setDisplaySetSelector: (key: string, value: string) => void;
|
||||
setDisplaySetSelector: (key: string, value: Array<string>) => void;
|
||||
|
||||
/**
|
||||
* Clears the entire display set selector map.
|
||||
@@ -53,7 +53,7 @@ const createDisplaySetSelectorStore = (set): DisplaySetSelectorState => ({
|
||||
/**
|
||||
* Sets the display set selector for a given key.
|
||||
*/
|
||||
setDisplaySetSelector: (key: string, value: string) =>
|
||||
setDisplaySetSelector: (key: string, value: Array<string>) =>
|
||||
set(
|
||||
state => ({
|
||||
displaySetSelectorMap: {
|
||||
|
||||
@@ -65,15 +65,23 @@ export function configureViewportForLayerAddition(params: {
|
||||
viewport.viewportOptions.orientation = cornerstoneViewportService.getOrientation(viewportId);
|
||||
}
|
||||
|
||||
// Do not force volume for SEG and RTSTRUCT if there is only one display set
|
||||
if (requestedLayerDisplaySet.isOverlayDisplaySet && currentDisplaySetUIDs.length === 1) {
|
||||
viewport.viewportOptions.viewportType = 'stack';
|
||||
} else {
|
||||
viewport.viewportOptions.viewportType = 'volume';
|
||||
// If a viewport type was already set do not reset it.
|
||||
if (!viewport.viewportOptions.viewportType) {
|
||||
// Do not force volume for SEG and RTSTRUCT if there is only one display set
|
||||
if (requestedLayerDisplaySet.isOverlayDisplaySet && currentDisplaySetUIDs.length === 1) {
|
||||
viewport.viewportOptions.viewportType = 'stack';
|
||||
} else {
|
||||
viewport.viewportOptions.viewportType = 'volume';
|
||||
}
|
||||
}
|
||||
|
||||
// create same amount of display set options as the number of display set UIDs
|
||||
const displaySetOptions = allDisplaySetInstanceUIDs.map((uid, index) => {
|
||||
// There is already a display set option for this display set, so return it.
|
||||
if (viewport.displaySetOptions?.[index]) {
|
||||
return viewport.displaySetOptions[index];
|
||||
}
|
||||
|
||||
if (index === 0) {
|
||||
// no colormap for background
|
||||
return {};
|
||||
|
||||
@@ -6,7 +6,7 @@ import { useHangingProtocolStageIndexStore } from '../stores/useHangingProtocolS
|
||||
export type ReturnType = {
|
||||
hangingProtocolStageIndexMap: Record<string, Types.HangingProtocol.HPInfo>;
|
||||
viewportGridStore: Record<string, unknown>;
|
||||
displaySetSelectorMap: Record<string, string>;
|
||||
displaySetSelectorMap: Record<string, Array<string>>;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -53,24 +53,33 @@ const reuseCachedLayout = (state, hangingProtocolService: HangingProtocolService
|
||||
if (!displaySetOptions) {
|
||||
return;
|
||||
}
|
||||
const activeDisplaySetUIDs = [];
|
||||
|
||||
for (let i = 0; i < displaySetOptions.length; i++) {
|
||||
const displaySetUID = displaySetInstanceUIDs[i];
|
||||
if (!displaySetUID) {
|
||||
continue;
|
||||
}
|
||||
if (viewportId === activeViewportId && i === 0) {
|
||||
setDisplaySetSelector(`${activeStudyUID}:activeDisplaySet:0`, displaySetUID);
|
||||
if (viewportId === activeViewportId) {
|
||||
activeDisplaySetUIDs.push(displaySetUID);
|
||||
}
|
||||
|
||||
// The activeDisplaySet selector should only be set once (i.e. for the actual active display set)
|
||||
if (displaySetOptions[i]?.id && displaySetOptions[i].id !== 'activeDisplaySet') {
|
||||
// TODO: handle multiple layers/display sets for the non-active viewports
|
||||
setDisplaySetSelector(
|
||||
`${activeStudyUID}:${displaySetOptions[i].id}:${
|
||||
displaySetOptions[i].matchedDisplaySetsIndex || 0
|
||||
}`,
|
||||
displaySetUID
|
||||
[displaySetUID]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (viewportId === activeViewportId) {
|
||||
// After going through all the display set options for the active viewport, store the display set selector array
|
||||
setDisplaySetSelector(`${activeStudyUID}:activeDisplaySet:0`, activeDisplaySetUIDs);
|
||||
}
|
||||
});
|
||||
|
||||
setHangingProtocolStageIndex(cacheId, hpInfo);
|
||||
|
||||
Reference in new issue
Block a user