feat: tools注册顺序导致的viewportInfo找不到

This commit is contained in:
mozzie 2024-09-19 14:29:59 +08:00
parent ba516af2f7
commit d09d852207
3 changed files with 38 additions and 50 deletions

View File

@ -38,9 +38,9 @@ const themeTitleBarStyles = {
export const platform = process.platform === "darwin" ? "macos" : "windows";
app.commandLine.appendSwitch('disable-web-security');
app.commandLine.appendSwitch('ignore-gpu-blocklist');
app.commandLine.appendSwitch('use-angle', 'gl');
app.commandLine.appendSwitch("disable-web-security");
app.commandLine.appendSwitch("ignore-gpu-blocklist");
app.commandLine.appendSwitch("use-angle", "gl");
// app.disableHardwareAcceleration()
@ -55,7 +55,7 @@ function createWindow() {
titleBarOverlay: { height: 36, ...themeTitleBarStyles[theme] }, // 渲染进程发消息动态改变这个
webPreferences: {
preload: path.join(__dirname, "preload.mjs"),
nodeIntegration: true
nodeIntegration: true,
},
});

View File

@ -18,8 +18,6 @@ export const initCornerstoneDICOMImageLoader = () => {
isMobile: false,
enableCacheOptimization: false,
});
console.log("preferSizeOverAccuracy", preferSizeOverAccuracy);
console.log("useNorm16Texture", useNorm16Texture);
cornerstoneDICOMImageLoader.external.cornerstone = cornerstone;
cornerstoneDICOMImageLoader.external.dicomParser = dicomParser;

View File

@ -15,6 +15,7 @@ import {
Enums as CoreEnums,
cache,
} from "@cornerstonejs/core";
import {
IStackViewport,
PublicViewportInput,
@ -31,7 +32,7 @@ import {
} from "./MprViewer/index.config";
import setCtTransferFunctionForVolumeActor from "./MprViewer/CornerstoneDicomLoader/setCtTransferFunctionForVolumeActor";
import { Slider } from "@/components/ui/slider";
import { stackViewportId, toolGroupStackId } from "./StackViewer/index.config";
import { stackViewportId } from "./StackViewer/index.config";
import { ToolBarMenu } from "./ToolBarMenu";
import { Model3DViewer } from "./ModelViewer";
@ -50,7 +51,6 @@ const wadoRsRoot = "http://localhost:8042/dicom-web";
const renderingEngineId = "renderEngineNo1";
const { ViewportType, OrientationAxis } = CoreEnums;
const wwwl = { windowCenter: 50, windowWidth: 850 };
export const Viewer = () => {
const volumeViewport1Ref = useRef<HTMLDivElement | null>(null);
@ -69,6 +69,7 @@ export const Viewer = () => {
const [imageIds, setImageIds] = useState<string[]>();
const renderingEngineRef = useRef<RenderingEngine>();
const volumeId = SeriesInstanceUID;
const toolGroupStackId = "STACK_TOOL_GROUP:" + SeriesInstanceUID;
useEffect(() => {
cornerstoneTools.addTool(StackScrollMouseWheelTool);
@ -89,6 +90,7 @@ export const Viewer = () => {
SeriesInstanceUID,
wadoRsRoot,
});
// 这一步会对imageIds进行排序如果不排序imageIds会错误乱,stackViewport顺序会错误
const volume = await volumeLoader.createAndCacheVolume(
SeriesInstanceUID,
@ -140,7 +142,6 @@ export const Viewer = () => {
...volumeViewportInput,
stackViewportInput,
]);
renderingEngineRef.current.enableElement(stackViewportInput);
const stackViewport = renderingEngineRef.current.getViewport(
stackViewportId
) as IStackViewport;
@ -148,22 +149,6 @@ export const Viewer = () => {
stackViewport.setStack(volume.imageIds);
setImageIds(volume.imageIds);
await setVolumesForViewports(
renderingEngineRef.current,
[
{
volumeId: SeriesInstanceUID,
callback: ({ volumeActor }) =>
setCtTransferFunctionForVolumeActor({
volumeActor,
defaultWindowCenter: wwwl.windowCenter,
defaultWindowWidth: wwwl.windowWidth,
}),
},
],
[viewportId1, viewportId2, viewportId3]
);
const toolGroupMpr = ToolGroupManager.createToolGroup(toolGroupMprId);
if (toolGroupMpr) {
toolGroupMpr.addViewport(viewportId1, renderingEngineId);
@ -204,6 +189,15 @@ export const Viewer = () => {
});
}
/**
* toolGroupviewportInfo
*/
await setVolumesForViewports(
renderingEngineRef.current,
[{ volumeId: SeriesInstanceUID }],
[viewportId1, viewportId2, viewportId3]
);
// 默认windowWidtth
// const { windowCenter, windowWidth } =
// volumeRef.current.cornerstoneImageMetaData;
@ -214,34 +208,22 @@ export const Viewer = () => {
});
return () => {
renderingEngineRef.current?.disableElement(stackViewportId);
renderingEngineRef.current?.disableElement(viewportId1);
renderingEngineRef.current?.disableElement(viewportId2);
renderingEngineRef.current?.disableElement(viewportId3);
// renderingEngineRef.current?.disableElement(stackViewportId);
// renderingEngineRef.current?.disableElement(viewportId1);
// renderingEngineRef.current?.disableElement(viewportId2);
// renderingEngineRef.current?.disableElement(viewportId3);
cache.purgeCache();
ToolGroupManager.destroy();
renderingEngineRef.current?.destroy();
ToolGroupManager.destroyToolGroup(toolGroupMprId);
ToolGroupManager.destroyToolGroup(toolGroupStackId);
cache.purgeCache();
console.log(cache.getVolume(volumeId!));
cornerstoneTools.removeTool(StackScrollMouseWheelTool);
1;
cornerstoneTools.removeTool(CrosshairsTool);
cornerstoneTools.removeTool(WindowLevelTool);
cornerstoneTools.removeTool(ZoomTool);
};
}, [SeriesInstanceUID, StudyInstanceUID, volumeId]);
}, [SeriesInstanceUID, StudyInstanceUID, toolGroupStackId, volumeId]);
const onChangeIndex = (value: number[]) => {
setIndex(value[0]);
};
useEffect(
() => setIndex(imageIds ? Math.floor(imageIds.length / 2) : 0),
[imageIds]
);
const onChangeIndex = (value: number[]) => setIndex(value[0]);
/**
*
@ -262,10 +244,12 @@ export const Viewer = () => {
};
}, [imageIds, index]);
// stack换图
useEffect(() => {
if (renderingEngineRef.current) {
const viewport = renderingEngineRef.current.getViewport(stackViewportId);
(viewport as IStackViewport)?.setImageIdIndex(index);
const engine = renderingEngineRef.current;
if (engine) {
const viewport = engine.getViewport(stackViewportId) as IStackViewport;
viewport?.setImageIdIndex(index);
}
}, [index]);
@ -331,8 +315,14 @@ export const Viewer = () => {
</ResizablePanel>
<ResizableHandle withHandle />
<ResizablePanel defaultSize={50}>
<div className="w-full h-1/3 border-b border-1 border-secondary" ref={volumeViewport1Ref} />
<div className="w-full h-1/3 border-b border-1 border-secondary" ref={volumeViewport2Ref} />
<div
className="w-full h-1/3 border-b border-1 border-secondary"
ref={volumeViewport1Ref}
/>
<div
className="w-full h-1/3 border-b border-1 border-secondary"
ref={volumeViewport2Ref}
/>
<div className="w-full h-1/3" ref={volumeViewport3Ref} />
</ResizablePanel>
</ResizablePanelGroup>