工具组
介绍
正如工具一节所述,要使用一个工具,你应当先通过
CornerstoneTools3D.addTool() 添加该工具,然后再通过工具组
把它加到视口上并设为激活状态。
工具组是 Cornerstone 系列库中的一个新概念。ToolGroup 的目标是提供一种
简单的方式,按「每视口、每工具」的粒度定义工具行为。此外,
共享同一个 ToolGroup 的视口可以共用相同的配置、模式和工具。
来看下面这组视口,以及我们期望的滚动和平移行为。

对 ct-axial 和 ct-sagittal 这两个视口,我们希望用鼠标滚轮滚动切片、
用鼠标中键拖拽平移。但对 pt-coronal 来说,它是一个最大密度投影(MIP)视口,
逐切片滚动没有意义,我们期望的行为是用鼠标滚轮旋转 MIP 体数据、并禁用平移。

视口与工具组之间是一对一关系。换句话说,任何视口都不能同时属于多个工具组。
创建工具组与添加工具
ToolGroup 由 ToolGroupManager 管理。工具组管理器用于创建、查找和销毁工具组。
目前工具组不是可选的:要使用某个工具,你必须创建一个工具组并把该工具加进去。
可以用 ToolGroupManager 的 createToolGroup 创建工具组。
import { ToolGroupManager } from '@cornerstonejs/tools';
const toolGroupId = 'ctToolGroup';
const ctToolGroup = ToolGroupManager.createToolGroup(toolGroupId);
// 把工具加入工具组
// 操作工具
ctToolGroup.addTool(PanTool.toolName);
ctToolGroup.addTool(ZoomTool.toolName);
ctToolGroup.addTool(ProbeTool.toolName);
把视口加入工具组
应当用 addViewport 把视口加入 ToolGroup。
// 把工具组应用到某个视口,或应用到渲染某个场景的所有视口
ctToolGroup.addViewport(viewportId, renderingEngineId);
为什么需要传 renderingEngineId?
renderingEngineId?原因是 viewportId 只在单个渲染引擎内唯一。你可以有多个渲染引擎,
它们各自包含带有相同 viewportId 的不同视口。
激活一个工具
可以为每个工具组调用 setToolActive 来激活某个工具,并提供相应的鼠标绑定键。
// 为每个工具设置该工具组中的工具模式
// 可能的模式包括:'Active'、'Passive'、'Enabled'、'Disabled'
ctToolGroup.setToolActive(LengthTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Primary }],
});
ctToolGroup.setToolActive(PanTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Auxiliary }],
});
ctToolGroup.setToolActive(ZoomTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Secondary }],
});
ctToolGroup.setToolActive(StackScrollMouseWheelTool.toolName);
其他工具模式也可以通过 setToolEnabled、setToolPassive
和 setToolDisabled 来设置。
工具组管理器
管理工具组的其他方法都可以通过 ToolGroupManager 取用。
getToolGroupForViewport
返回给定视口所属的工具组,更多内容见 这里。
getToolGroup
返回给定 toolGroupId 对应的工具组。
destroyToolGroup
销毁一个工具组。