pre refactor to same rendering engine
This commit is contained in:
+71
-47
@@ -11,6 +11,7 @@ import { init as dicomImageLoaderInit } from "@cornerstonejs/dicom-image-loader"
|
|||||||
import * as cornerstoneTools from '@cornerstonejs/tools';
|
import * as cornerstoneTools from '@cornerstonejs/tools';
|
||||||
import { StackScrollOutOfBoundsEvent } from 'core/src/types/EventTypes';
|
import { StackScrollOutOfBoundsEvent } from 'core/src/types/EventTypes';
|
||||||
import { segmentation, Enums as csEnums } from '@cornerstonejs/tools';
|
import { segmentation, Enums as csEnums } from '@cornerstonejs/tools';
|
||||||
|
import { voi } from "@cornerstonejs/tools/utilities"
|
||||||
|
|
||||||
|
|
||||||
const { MouseBindings, KeyboardBindings } = csToolsEnums;
|
const { MouseBindings, KeyboardBindings } = csToolsEnums;
|
||||||
@@ -83,6 +84,10 @@ function App() {
|
|||||||
const viewportRefs = useRef<Array<HTMLDivElement | null>>([])
|
const viewportRefs = useRef<Array<HTMLDivElement | null>>([])
|
||||||
const renderingEnginesRef = useRef<Record<string, any>>({});
|
const renderingEnginesRef = useRef<Record<string, any>>({});
|
||||||
|
|
||||||
|
// Store the properties and scroll position of existing viewports before grid change
|
||||||
|
const prevViewportProps = useRef<Record<number, any>>({});
|
||||||
|
const prevScrollIndices = useRef<Record<number, number>>({});
|
||||||
|
|
||||||
// Helper to generate grid options
|
// Helper to generate grid options
|
||||||
const gridOptions = []
|
const gridOptions = []
|
||||||
for (let rows = 1; rows <= 3; rows++) {
|
for (let rows = 1; rows <= 3; rows++) {
|
||||||
@@ -219,27 +224,27 @@ function App() {
|
|||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Store the properties of existing viewports before grid change
|
|
||||||
const prevViewportProps = useRef<Record<number, any>>({});
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const setup = async () => {
|
const setup = async () => {
|
||||||
// 1. Capture state of existing viewports before grid change
|
// 1. Save properties and scroll position for only the existing viewports
|
||||||
for (let i = 0; i < viewportGrid.rows * viewportGrid.cols; i++) {
|
const prevCount = Object.keys(renderingEnginesRef.current).length;
|
||||||
const renderingEngineId = `renderingEngine_${i}`;
|
for (let i = 0; i < prevCount; i++) {
|
||||||
const viewportId = `CT_${i}`;
|
const renderingEngineId = `renderingEngine_${i}`;
|
||||||
try {
|
const viewportId = `CT_${i}`;
|
||||||
const renderingEngine = renderingEnginesRef.current[renderingEngineId];
|
const renderingEngine = renderingEnginesRef.current[renderingEngineId];
|
||||||
if (renderingEngine) {
|
if (renderingEngine) {
|
||||||
const viewport = renderingEngine.getViewport(viewportId);
|
const viewport = renderingEngine.getViewport(viewportId);
|
||||||
if (viewport && typeof viewport.getProperties === "function") {
|
if (viewport) {
|
||||||
prevViewportProps.current[i] = viewport.getProperties();
|
if (typeof viewport.getProperties === "function") {
|
||||||
}
|
console.log("Saving previous state for viewport", i, viewport.getProperties())
|
||||||
|
prevViewportProps.current[i] = viewport.getProperties();
|
||||||
|
}
|
||||||
|
if (typeof viewport.getCurrentImageIdIndex === "function") {
|
||||||
|
prevScrollIndices.current[i] = viewport.getCurrentImageIdIndex();
|
||||||
}
|
}
|
||||||
} catch (e) {
|
|
||||||
// Ignore if not found
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (running.current) {
|
if (running.current) {
|
||||||
if (loadedImageIds) {
|
if (loadedImageIds) {
|
||||||
@@ -249,8 +254,11 @@ function App() {
|
|||||||
const element = viewportRefs.current[i];
|
const element = viewportRefs.current[i];
|
||||||
if (!element) continue;
|
if (!element) continue;
|
||||||
|
|
||||||
const renderingEngine = new RenderingEngine(renderingEngineId);
|
let renderingEngine = renderingEnginesRef.current[renderingEngineId];
|
||||||
renderingEnginesRef.current[renderingEngineId] = renderingEngine;
|
if (!renderingEngine) {
|
||||||
|
renderingEngine = new RenderingEngine(renderingEngineId);
|
||||||
|
renderingEnginesRef.current[renderingEngineId] = renderingEngine;
|
||||||
|
}
|
||||||
const viewportInput = {
|
const viewportInput = {
|
||||||
viewportId,
|
viewportId,
|
||||||
type: Enums.ViewportType.STACK,
|
type: Enums.ViewportType.STACK,
|
||||||
@@ -264,32 +272,34 @@ function App() {
|
|||||||
const viewport = renderingEngine.getViewport(viewportId);
|
const viewport = renderingEngine.getViewport(viewportId);
|
||||||
viewport.setStack(loadedImageIds);
|
viewport.setStack(loadedImageIds);
|
||||||
|
|
||||||
/* // Restore previous state for existing viewports only
|
|
||||||
if (prevViewportProps.current[i] && typeof viewport.setProperties === "function") {
|
renderingEngine.resize(true, true)
|
||||||
viewport.setProperties(prevViewportProps.current[i]);
|
|
||||||
} */
|
|
||||||
|
|
||||||
cornerstoneTools.utilities.stackPrefetch.enable(viewport.element);
|
cornerstoneTools.utilities.stackPrefetch.enable(viewport.element);
|
||||||
renderingEngine.resize(true, true)
|
viewport.resize();
|
||||||
console.log(i, viewport)
|
|
||||||
viewport.render();
|
viewport.render();
|
||||||
|
|
||||||
|
// Restore previous state for existing viewports only
|
||||||
|
if (prevViewportProps.current[i] && typeof viewport.setProperties === "function") {
|
||||||
|
console.log("Restoring properties for viewport", i, prevViewportProps.current[i])
|
||||||
|
console.log(viewport)
|
||||||
|
viewport.setProperties(prevViewportProps.current[i]);
|
||||||
|
}
|
||||||
|
// Restore previous scroll position for existing viewports only
|
||||||
|
if (
|
||||||
|
prevScrollIndices.current[i] !== undefined &&
|
||||||
|
typeof viewport.setImageIdIndex === "function"
|
||||||
|
) {
|
||||||
|
viewport.setImageIdIndex(prevScrollIndices.current[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateOverlay(i, viewport);
|
||||||
|
|
||||||
// Attach overlay update for each viewport
|
// Attach overlay update for each viewport
|
||||||
viewport.element.addEventListener(Enums.Events.IMAGE_RENDERED, () => updateOverlay(i, viewport));
|
viewport.element.addEventListener(Enums.Events.IMAGE_RENDERED, () => updateOverlay(i, viewport));
|
||||||
// Initial overlay update
|
// Initial overlay update
|
||||||
updateOverlay(i, viewport);
|
updateOverlay(i, viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* // Resize and render all viewports to ensure correct canvas size
|
|
||||||
for (let i = 0; i < viewportGrid.rows * viewportGrid.cols; i++) {
|
|
||||||
const renderingEngineId = `renderingEngine_${i}`;
|
|
||||||
const viewportId = `CT_${i}`;
|
|
||||||
const renderingEngine = renderingEnginesRef.current[renderingEngineId];
|
|
||||||
if (renderingEngine) {
|
|
||||||
const viewport = renderingEngine.getViewport(viewportId);
|
|
||||||
renderingEngine.resize(true, false)
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
applyMouseToolBindings();
|
applyMouseToolBindings();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -325,14 +335,31 @@ function App() {
|
|||||||
const viewport = renderingEngine.getViewport(viewportId);
|
const viewport = renderingEngine.getViewport(viewportId);
|
||||||
viewport.setStack(imageIds);
|
viewport.setStack(imageIds);
|
||||||
|
|
||||||
// Restore previous state for existing viewports only
|
/* // Restore previous state for existing viewports only
|
||||||
if (prevViewportProps.current[i] && typeof viewport.setProperties === "function") {
|
if (
|
||||||
|
prevViewportProps.current[i] &&
|
||||||
|
typeof viewport.setProperties === "function"
|
||||||
|
) {
|
||||||
viewport.setProperties(prevViewportProps.current[i]);
|
viewport.setProperties(prevViewportProps.current[i]);
|
||||||
}
|
}
|
||||||
|
// Restore previous scroll position for existing viewports only
|
||||||
|
if (
|
||||||
|
prevScrollIndices.current[i] !== undefined &&
|
||||||
|
typeof viewport.setImageIdIndex === "function"
|
||||||
|
) {
|
||||||
|
viewport.setImageIdIndex(prevScrollIndices.current[i]);
|
||||||
|
} */
|
||||||
|
|
||||||
cornerstoneTools.utilities.stackPrefetch.enable(viewport.element);
|
cornerstoneTools.utilities.stackPrefetch.enable(viewport.element);
|
||||||
viewport.resize();
|
|
||||||
viewport.render();
|
setTimeout(() => {
|
||||||
|
console.log("Resizing viewport", i);
|
||||||
|
renderingEngine.resize(false, false)
|
||||||
|
viewport.resetCameraForResize();
|
||||||
|
viewport.render();
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
console.log(viewport)
|
console.log(viewport)
|
||||||
|
|
||||||
@@ -344,15 +371,12 @@ function App() {
|
|||||||
applyMouseToolBindings();
|
applyMouseToolBindings();
|
||||||
};
|
};
|
||||||
|
|
||||||
setup();
|
// Use requestAnimationFrame to ensure DOM is painted before setup
|
||||||
/* // Delay setup by 100ms (adjust as needed)
|
const raf = requestAnimationFrame(() => {
|
||||||
const timeout = setTimeout(() => {
|
setup();
|
||||||
setup();
|
});
|
||||||
|
|
||||||
return () => clearTimeout(timeout);
|
return () => cancelAnimationFrame(raf);
|
||||||
}, 300); */
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
}, [elementRef, updateOverlay, viewportGrid, loadedImageIds]);
|
}, [elementRef, updateOverlay, viewportGrid, loadedImageIds]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user