This commit is contained in:
Ross
2025-06-23 11:31:14 +01:00
parent c27a52243f
commit 98c71e73e2
+58 -19
View File
@@ -740,18 +740,25 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
}
// Update overlay info for a specific viewport
const updateOverlay = useCallback((viewportIdx: number, viewport: any) => {
if (!viewport) return;
const currentIndex = typeof viewport.getCurrentImageIdIndex === "function"
const updateOverlay = useCallback((viewportIdx: number, viewport: any) => {
console.log("updateOverlay called for viewportIdx:", viewportIdx, "viewport:", viewport);
if (!viewport) return;
let currentIndex = 0;
let total = 0;
let windowCenter = "";
let windowWidth = "";
console.log("Updating overlay for viewport:", viewportIdx, viewportModes[viewportIdx]);
if (viewportModes[viewportIdx] === "stack") {
currentIndex = typeof viewport.getCurrentImageIdIndex === "function"
? viewport.getCurrentImageIdIndex()
: 0;
const imageIds = typeof viewport.getImageIds === "function"
? viewport.getImageIds()
: [];
const total = imageIds.length;
let windowCenter = "";
let windowWidth = "";
total = imageIds.length;
if (typeof viewport.getProperties === "function") {
const props = viewport.getProperties();
if (props.voiRange) {
@@ -760,18 +767,45 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
windowWidth = (upper - lower).toFixed(0);
}
}
} else if (viewportModes[viewportIdx] === "volume") {
console.log(viewport)
// For volume, get slice index and number of slices if available
if (typeof viewport.getSliceIndex === "function") {
currentIndex = viewport.getSliceIndex();
}
if (typeof viewport.getNumberOfSlices === "function") {
total = viewport.getNumberOfSlices();
}
// Get VOI from getProperties (may need to pass volumeId if multiple volumes)
if (typeof viewport.getProperties === "function") {
let props;
if (viewport.volumeIds && viewport.volumeIds.size > 0) {
// If multiple volumes, get the first one
const volumeId = Array.from(viewport.volumeIds)[0];
props = viewport.getProperties(volumeId);
} else {
props = viewport.getProperties();
}
if (props && props.voiRange) {
const { lower, upper } = props.voiRange;
windowCenter = ((upper + lower) / 2).toFixed(0);
windowWidth = (upper - lower).toFixed(0);
}
}
}
setImageInfos(prev => {
const next = [...prev];
next[viewportIdx] = {
index: currentIndex + 1,
total,
windowCenter,
windowWidth,
};
return next;
});
}, [viewportModes]);
setImageInfos(prev => {
const next = [...prev];
next[viewportIdx] = {
index: currentIndex + 1,
total,
windowCenter,
windowWidth,
};
return next;
});
}, []);
const [gridBtnActive, setGridBtnActive] = useState(false);
@@ -968,7 +1002,7 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
(element)._overlayListener = overlayListener;
updateOverlay(i, viewport);
}
const activeVolumeViewports = [];
for (let i = 0; i < viewportGrid.rows * viewportGrid.cols; i++) {
const viewportId = `CT_${i}`;
@@ -1493,6 +1527,7 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
console.log("viewport", viewport);
console.log("viewport.getImageIds", viewport.getImageIds?.());
if (!importedImageIds.length) continue;
try {
const viewportImageIds = viewport.getImageIds?.() || [];
if (
viewportImageIds.length !== importedImageIds.length ||
@@ -1505,6 +1540,10 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
allReady = false;
break;
}
} catch(e) {
allReady = false;
}
}
if (!allReady && attempts < maxAttempts) {
attempts++;