fix scroll and position reloaded for volume

This commit is contained in:
Ross
2025-06-23 15:12:33 +01:00
parent 28884670e4
commit d5046659fd
2 changed files with 15 additions and 31 deletions
+14 -30
View File
@@ -1545,9 +1545,6 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
const stackIdx = state.stackIdx?.[i];
const stackObj = state.stacks?.[stackIdx];
const importedImageIds = stackObj?.i || [];
console.log("Checking viewport", i, "with importedImageIds", importedImageIds);
console.log("viewport", viewport);
console.log("viewport.getImageIds", viewport.getImageIds?.());
if (!importedImageIds.length) continue;
try {
const viewportImageIds = viewport.getImageIds?.() || [];
@@ -1602,19 +1599,15 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
console.warn("Failed to restore orientation for viewport", i, e);
}
}
// --- Restore slice index if present ---
if (
state.volumeSliceIndices &&
typeof state.volumeSliceIndices[i] === "number" &&
typeof viewport.setSliceIndex === "function"
state.volumeSliceIndices
) {
try {
viewport.setSliceIndex(state.volumeSliceIndices[i]);
viewport.render();
} catch (e) {
console.warn("Failed to restore slice index for viewport", i, e);
}
console.log("Restoring volume slice index for viewport", i, state.volumeSliceIndices[i]);
setTimeout(() => {
csUtilities.jumpToSlice(viewport.element, { imageIndex: state.volumeSliceIndices[i] });
}, 100);
}
viewport.render();
} else {
// --- Restore stack ---
@@ -1664,6 +1657,7 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
viewport.setCamera(state.cam[i]);
viewport.render();
}
// --- Restore slice index if present ---
}
restoringStateRef.current = false;
}
@@ -1924,11 +1918,14 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
useEffect(() => {
function handleArrowKeyNavigation(e: KeyboardEvent) {
console.log("Handling arrow key navigation", e.key);
console.log("activeViewport", activeViewport);
if (activeViewport === null) return;
const renderingEngine = renderingEngineRef.current;
if (!renderingEngine) return;
const viewport = renderingEngine.getViewport(`CT_${activeViewport}`);
if (!viewport) return;
console.log(viewport)
// --- Stack mode navigation ---
if (viewportModes[activeViewport] === "stack") {
@@ -1938,17 +1935,12 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
) return;
const imageIds = viewportImageIds[activeViewport];
if (!imageIds || imageIds.length === 0) return;
let idx = viewport.getCurrentImageIdIndex();
if (e.key === "ArrowUp" || e.key === "ArrowRight") {
idx = idx < imageIds.length - 1 ? idx + 1 : 0;
csUtilities.jumpToSlice(viewport.element, { imageIndex: idx });
updateOverlay(activeViewport, viewport);
csUtilities.scroll(viewport, { delta: -1});
e.preventDefault();
} else if (e.key === "ArrowDown" || e.key === "ArrowLeft") {
idx = idx > 0 ? idx - 1 : imageIds.length - 1;
csUtilities.jumpToSlice(viewport.element, { imageIndex: idx });
updateOverlay(activeViewport, viewport);
csUtilities.scroll(viewport, { delta: 1});
e.preventDefault();
}
}
@@ -1958,23 +1950,15 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
// Try to scroll through slices in the current orientation
if (
typeof viewport.getSliceIndex === "function" &&
typeof viewport.setSliceIndex === "function" &&
typeof viewport.getNumberOfSlices === "function"
) {
const numSlices = viewport.getNumberOfSlices();
let idx = viewport.getSliceIndex();
if (numSlices > 1) {
if (e.key === "ArrowUp" || e.key === "ArrowRight") {
idx = idx < numSlices - 1 ? idx + 1 : 0;
viewport.setSliceIndex(idx);
viewport.render();
updateOverlay(activeViewport, viewport);
csUtilities.scroll(viewport, { delta: -1});
e.preventDefault();
} else if (e.key === "ArrowDown" || e.key === "ArrowLeft") {
idx = idx > 0 ? idx - 1 : numSlices - 1;
viewport.setSliceIndex(idx);
viewport.render();
updateOverlay(activeViewport, viewport);
csUtilities.scroll(viewport, { delta: 1});
e.preventDefault();
}
}