# 工具解析
# 模式
工具的模式(在v2中称为工具状态)决定了如何呈现工具,以及如何与之交互。四种标准模式是: 工具的模式分为四种状态:
- Active: 激活
- Passive:被动
- Enabled:启用
- Disabled:禁用
模式 | 描述 |
---|---|
Active | 激活状态的工具将呈现并响应用户输入,或者能够创建新的标绘和/或测量。 |
Passive | 被动工具将呈现并被动响应用户输入。他们的数据可以被操纵,但不能被创建。 |
Enabled | 启用的工具将呈现,但不会响应输入。“启用”工具状态本质上是“只读”状态。 |
Disabled (default) | 工具的默认状态。禁用的工具不能与交互,也不能在启用的元素上呈现。 |
🚧 You can quickly test these modes out for yourself by checking out this tool's example/demo page ~TODO~
# 切换工具的状态
你要是已经 启用了一个或者多个元素 并且已经 给这些元素添加工具, 可以通过以下两种方式之一更改现有工具的模式:
- 针对所有已启用元素 如果已将同名工具添加到多个启用的元素中,则可以使用以下方法之一更新该工具的所有实例:
// Active
cornerstoneTools.setToolActive('ToolName', options);
// Passive
cornerstoneTools.setToolPassive('ToolName', options);
// Enabled
cornerstoneTools.setToolEnabled('ToolName', options);
// Disabled
cornerstoneTools.setToolDisabled('ToolName', options);
- 针对指定的已启用的元素 如果需要工具行为在多个启用的元素之间有所不同,可以使用以下方法之一更改特定启用元素的工具模式:
// Active
cornerstoneTools.setToolActiveForElement(
enabledElement,
'ToolName',
{
mouseButtonMask: 1,
},
['Mouse']
);
// Passive
cornerstoneTools.setToolPassiveForElement(enabledElement, 'ToolName', options);
// Enabled
cornerstoneTools.setToolEnabledForElement(enabledElement, 'ToolName', options);
// Disabled
cornerstoneTools.setToolDisabledForElement(enabledElement, 'ToolName', options);
# 附加说明
- 有些工具可能只能以四种模式中的两种存在。例如,“缩放覆盖工具”只能是“启用”或“禁用”。尝试将其设置为“active”将使工具默认为“enabled”`。
- 不同基本类型的工具或固有的复杂工具可能会稍微偏离这些准则。
- 第三方工具可能不符合这些准则。
# 配置项
当切换工具模式的时候,你也可以去更新它内部配置。因为工具的配置项多种多样,不过也有一些通用的配置项。比如,所有和鼠标交互相关的工具,通过 mouseButtonMask
去指定哪个鼠标键去出发它的行为。为了更好的理解配置项是怎么应用的,请看以下示例:
// 设置工具的配置项 `{ mouseButtonMask: 1 }`
cornerstoneTools.setToolActive('ToolName', { mouseButtonMask: 1 });
// 工具的配置项不会变化
cornerstoneTools.setToolActive('ToolName');
cornerstoneTools.setToolActive('ToolName', null);
cornerstoneTools.setToolActive('ToolName', undefined);
cornerstoneTools.setToolActive('ToolName', {});
// 工具的配置项新增了一项 `{ isTouchActive: false }`
cornerstoneTools.setToolActive('ToolName', { isTouchActive: false });
// 上面的 `mouseButtonMask` 配置项的值被更改为 `2`
cornerstoneTools.setToolActive('ToolName', { mouseButtonMask: 2 });
# 通用配置项
TODO: 在 [
BaseTool
](../tool types/index.md#base tool) 上创建一个属性,该属性是工具内部使用的所有配置选项的字符串列表?然后在这里维护一个列表,指出每个属性的用途?
配置项 | 鼠标 | 触控 | 标注 | 刷子 |
---|---|---|---|---|
mouseButtonMask | x | |||
preventHandleOutsideImage | x | |||
isTouchActive | x |
# 交互类型
🚧 This section needs content
# 策略
工具可以有多种操作策略。[BaseTool
](../tool types/index.md#base tool)是所有工具的继承源,它接受与工具策略相关的两个参数:
Argument | Type | Description |
---|---|---|
strategies | Object | 一种 Object ,由 function 组成,以 evt 和 configuration 作为参数并执行操作。 |
defaultStrategy | string | 要应用的默认策略的名称。名称应与“strategies”中的属性名称相同。 |
在实例化该工具时,activeStrategy
设置为 defaultStrategy
。如果没有 defaultStrategy
,则使用 strategies
的第一个函数。策略机制是完全可选的。
BaseTool
具有函数 applyActiveStrategy(evt,this.configuration)
将执行activeStrategy
,并返回该策略返回的任何值。
可以通过将 tool.activeStrategy
设置为新值来更改策略。可以通过调用 setDefaultStrategy
将策略重置为默认值。
使用策略机制的工具的一个简单示例是 rotate
Tool (opens new window).
# 混入
mixin 是一组成员函数,可以在实例化时添加到工具中,从而赋予它额外的行为。mixin 存储在顶级的 src/Mixins
目录中。
# 向工具添加 mixin
通过将数组传递给工具构造函数的 Mixins
参数,可以将 mixin 添加到工具中。数组的每个元素必须是一个字符串,其中包含要应用的 mixin 的名称。
例如,如果一个工具只有 Enabled
或 Disabled
才有意义,那么可以将其命名为 enabledOrDisabledBinaryTool
:
export default class ExampleOverlayTool extends BaseTool {
// Pass an array of mixins to the constructor.
constructor(
name = "ExampleOverlay",
mixins = ["enabledOrDisabledBinaryTool"]
) {
// Pass mixins to 'super' so that BaseTool's
// Constructor can attach it to the class.
super({
name,
mixins
});
}
}
由于这种混入,工具的模式现在将在设置为「Active」时切换到「Enabled」,在设置为「Passive」时切换到「Disabled」
# 注册新的混入
要创建新的mixin,请在 mixins
目录中创建一个包含一些函数的新文件,并在“export”中创建一个包含这些函数的 default
对象,例如:
// mixins/helloTool.js
function helloTool() {
console.log("Hello Tool!");
}
export default {
helloTool
};
然后在 mixins/index.js
文件内注册这个混入,这将允许通过其构造函数的 mixins
参数将其附加到工具:
// mixins/index.js
// Other imports
import helloTool from "./helloTool.js";
export default {
// Other registered functions...
helloTool
};
# measurement-data
🚧 This section needs content