From d09d852207730880869f039c17ce4c30fcd63bae Mon Sep 17 00:00:00 2001 From: mozzie Date: Thu, 19 Sep 2024 14:29:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20tools=E6=B3=A8=E5=86=8C=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E5=AF=BC=E8=87=B4=E7=9A=84viewportInfo=E6=89=BE?= =?UTF-8?q?=E4=B8=8D=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/desktop/electron/main.ts | 8 +- .../initCornerstoneDicomImageLoader.ts | 2 - apps/desktop/src/pages/Viewer/index.tsx | 78 ++++++++----------- 3 files changed, 38 insertions(+), 50 deletions(-) diff --git a/apps/desktop/electron/main.ts b/apps/desktop/electron/main.ts index fe4d78a..6065a7b 100644 --- a/apps/desktop/electron/main.ts +++ b/apps/desktop/electron/main.ts @@ -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, }, }); diff --git a/apps/desktop/src/pages/Viewer/MprViewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts b/apps/desktop/src/pages/Viewer/MprViewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts index 84d2380..9b403cc 100644 --- a/apps/desktop/src/pages/Viewer/MprViewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts +++ b/apps/desktop/src/pages/Viewer/MprViewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts @@ -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; diff --git a/apps/desktop/src/pages/Viewer/index.tsx b/apps/desktop/src/pages/Viewer/index.tsx index f348392..916f045 100644 --- a/apps/desktop/src/pages/Viewer/index.tsx +++ b/apps/desktop/src/pages/Viewer/index.tsx @@ -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(null); @@ -69,6 +69,7 @@ export const Viewer = () => { const [imageIds, setImageIds] = useState(); const renderingEngineRef = useRef(); 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 = () => { }); } + /** + * 先注册toolGroup,不然会找不到viewportInfo + */ + 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 = () => { -
-
+
+