|
@@ -0,0 +1,62 @@
|
|
|
+import React, { useEffect, useRef } from 'react';
|
|
|
+import * as cornerstone from '@cornerstonejs/core';
|
|
|
+import * as cornerstoneTools from '@cornerstonejs/tools';
|
|
|
+import * as cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';
|
|
|
+import createImageIdsAndCacheMetaData from '../../createImageIdsAndCacheMetaData';
|
|
|
+
|
|
|
+const StackViewer = ({ imageIndex }) => {
|
|
|
+ const elementRef = useRef<HTMLDivElement>(null);
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ const setup = async () => {
|
|
|
+ // 初始化 Cornerstone
|
|
|
+ cornerstone.init();
|
|
|
+ cornerstoneTools.init();
|
|
|
+ // 注册加载器
|
|
|
+ cornerstoneDICOMImageLoader.init();
|
|
|
+ // Get Cornerstone imageIds and fetch metadata into RAM
|
|
|
+ const imageIds = await createImageIdsAndCacheMetaData({
|
|
|
+ StudyInstanceUID:
|
|
|
+ '1.3.6.1.4.1.14519.5.2.1.7009.2403.334240657131972136850343327463',
|
|
|
+ SeriesInstanceUID:
|
|
|
+ '1.3.6.1.4.1.14519.5.2.1.7009.2403.226151125820845824875394858561',
|
|
|
+ wadoRsRoot: 'https://d14fa38qiwhyfd.cloudfront.net/dicomweb',
|
|
|
+ });
|
|
|
+ // Instantiate a rendering engine
|
|
|
+ const renderingEngineId = 'myRenderingEngine';
|
|
|
+ const renderingEngine = new cornerstone.RenderingEngine(
|
|
|
+ renderingEngineId
|
|
|
+ );
|
|
|
+
|
|
|
+ const viewportId = 'CT_AXIAL_STACK';
|
|
|
+
|
|
|
+ const viewportInput: cornerstone.Types.PublicViewportInput = {
|
|
|
+ viewportId,
|
|
|
+ // @ts-expect-error why error ?
|
|
|
+ element: elementRef.current,
|
|
|
+ type: cornerstone.Enums.ViewportType.STACK,
|
|
|
+ };
|
|
|
+
|
|
|
+ renderingEngine.enableElement(viewportInput);
|
|
|
+ // Get the stack viewport that was created
|
|
|
+ const viewport = renderingEngine.getViewport(
|
|
|
+ viewportId
|
|
|
+ ) as cornerstone.Types.IStackViewport;
|
|
|
+
|
|
|
+ viewport.setStack(imageIds, imageIndex);
|
|
|
+
|
|
|
+ viewport.render();
|
|
|
+ };
|
|
|
+
|
|
|
+ setup();
|
|
|
+ }, [elementRef]);
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div
|
|
|
+ ref={elementRef}
|
|
|
+ style={{ width: '100%', height: '100%', backgroundColor: '#000' }}
|
|
|
+ />
|
|
|
+ );
|
|
|
+};
|
|
|
+
|
|
|
+export default StackViewer;
|