概念
渲染
index.html
<canvas class="target-canvas"></canvas>
app.js
import {
RenderingEngine, // 类
ORIENTATION, // 常量
ViewportType, // 枚举
} from 'vtkjs-viewport';
// 渲染
const renderingEngine = new RenderingEngine('ExampleRenderingEngineID');
const volumeId = 'VOLUME_ID';
const viewports = [];
const viewport = {
sceneUID,
viewportId: 'viewportUID_0',
type: ViewportType.ORTHOGRAPHIC,
canvas: document.querySelector('.target-canvas'),
defaultOptions: {
orientation: Enums.OrientationAxis.AXIAL,
background: [Math.random(), Math.random(), Math.random()],
},
};
// 启动渲染
viewports.push(viewport);
renderingEngine.setViewports(viewports);
// 渲染背景
renderingEngine.render();
// 创建并加载我们的图像体积
// 参考:`./examples/helpers/getImageIdsAndCacheMetadata.js`
const imageIds = [
'wadors:https://wadoRsRoot.com/studies/studyInstanceUID/series/SeriesInstanceUID/instances/SOPInstanceUID/frames/1',
'wadors:https://wadoRsRoot.com/studies/studyInstanceUID/series/SeriesInstanceUID/instances/SOPInstanceUID/frames/2',
'wadors:https://wadoRsRoot.com/studies/studyInstanceUID/series/SeriesInstanceUID/instances/SOPInstanceUID/frames/3',
];
imageCache.makeAndCacheImageVolume(imageIds, volumeId);
imageCache.loadVolume(volumeId, (event) => {
if (event.framesProcessed === event.numFrames) {
console.log('加载完成!');
}
});
// 将场景与一个或多个图像体积绑定
const scene = renderingEngine.getScene(sceneUID);
scene.setVolumes([
{
volumeId,
callback: ({ volumeActor, volumeId }) => {
// 在这里可以设置传输函数或 PET 色彩图
console.log('图像体积已加载!');
},
},
]);
const viewport = scene.getViewport(viewports[0].viewportId);
// 这将初始化 GPU 内存中的体积
renderingEngine.render();
大多数情况下,更新操作很简单,只需使用:
RenderingEngine.setViewports
和Scene.setVolumes
如果你使用的是客户端路由和/或需要更强力地清理资源,大多数构造都有 .destroy
方法。例如:
renderingEngine.destroy();
工具
工具是一个未实例化的类,至少实现了 BaseTool
接口。工具可以通过其构造函数进行配置。要使用工具,必须:
- 使用库的顶级
addTool
函数添加未实例化的工具 - 将同一工具通过名称添加到 ToolGroup
工具的行为依赖于与其 Tool Group 关联的渲染引擎、场景和视口,以及工具当前的模式。
添加工具
@Tools 库自带了几个常用工具,所有这些工具都实现了 BaseTool
或 AnnotationTool
接口。添加工具使其可以用于 ToolGroups。还提供了一个高层次的 .removeTool
方法。
import * as csTools3d from '@cornerstonejs/tools';
// 将未实例化的工具类添加到库
// 这些将用于在显式将每个工具添加到一个或多个工具组时初始化工具实例
const { PanTool, StackScrollMouseWheelTool, ZoomTool, LengthTool } = csTools3d;
csTools3d.addTool(PanTool);
csTools3d.addTool(StackScrollMouseWheelTool);
csTools3d.addTool(ZoomTool);
csTools3d.addTool(LengthTool);
工具组管理器
工具组是用于在一组 RenderingEngine
、Scene
和/或 Viewport
之间共享工具配置、状态和模式的一种方式。工具组由工具组管理器管理。工具组管理器用于创建、搜索和销毁工具组。
import { ToolGroupManager } from '@cornerstonejs/tools';
import { ctVolumeId } from './constants';
const toolGroupId = 'TOOL_GROUP_ID';
const sceneToolGroup = ToolGroupManager.createToolGroup(TOOL_GROUP_ID);
// 向工具组添加工具
sceneToolGroup.addTool(PanTool.toolName);
sceneToolGroup.addTool(ZoomTool.toolName);
sceneToolGroup.addTool(StackScrollMouseWheelTool.toolName);
sceneToolGroup.addTool(LengthTool.toolName, {
configuration: { volumeId: ctVolumeId },
});