fix scroll and position reloaded for volume
This commit is contained in:
+14
-30
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user