渲染引擎的视口访问器
概览
RenderingEngine.getStackViewport()、RenderingEngine.getStackViewports()
和 RenderingEngine.getVolumeViewports() 已被移除。
请改用 getViewport() 或 getViewports(),然后按你所需的行为来筛选。
这项改动对 ViewportV2 很重要:因为一个 PlanarViewport 可以暴露
堆栈式或体数据式的兼容方法,却并不是 StackViewport 或 VolumeViewport。
为什么要做这项改动
旧的那几个访问器是按旧的具体类来分类视口的。
这在 V2 视口上就行不通了——同一个视口可能同时支持:
- 影像切面类工作流,例如
setStack() - 体数据类工作流,例如
setVolumes() - 共享的影像查询,例如
getCurrentImageId()或hasImageURI()
而它实际上并不属于旧的堆栈或体数据视口类型。
迁移
getStackViewport(viewportId)
迁移前:
const viewport = renderingEngine.getStackViewport(viewportId);
await viewport.setStack(imageIds);
迁移后:
import { utilities } from '@cornerstonejs/core';
const viewport = renderingEngine.getViewport(viewportId);
if (!utilities.viewportSupportsStackCompatibility(viewport)) {
throw new Error(`Viewport ${viewportId} does not implement setStack`);
}
await viewport.setStack(imageIds);
getStackViewports()
迁移前:
const stackViewports = renderingEngine.getStackViewports();
迁移后:
import { utilities } from '@cornerstonejs/core';
const stackViewports = renderingEngine
.getViewports()
.filter(utilities.viewportSupportsStackCompatibility);
如果你只需要影像切面类的查询,就改用更窄的那个守卫:
const sliceViewports = renderingEngine
.getViewports()
.filter(utilities.viewportSupportsImageSlices);
getVolumeViewports()
迁移前:
const volumeViewports = renderingEngine.getVolumeViewports();
迁移后:
选择与你所需操作相匹配的那个守卫:
import { utilities } from '@cornerstonejs/core';
const volumeInputViewports = renderingEngine
.getViewports()
.filter(utilities.viewportSupportsVolumeCompatibility);
const volumeActorViewports = renderingEngine
.getViewports()
.filter(utilities.viewportSupportsVolumeActors);
const volumeURIViewports = renderingEngine
.getViewports()
.filter(utilities.viewportSupportsVolumeURI);
新增的能力守卫
Cornerstone3D 现在在 utilities 下暴露了这些基于能力的辅助函数:
viewportSupportsStackCompatibilityviewportSupportsImageSlicesviewportSupportsStackCalibrationviewportSupportsVolumeCompatibilityviewportSupportsVolumeActorsviewportSupportsVolumeIdviewportSupportsVolumeURI
有了这些守卫,你的代码就可以依赖「所支持的行为」, 而不再依赖旧的视口类。