注释管理器
注释管理器是一个单例类,用于管理 Cornerstone Tools 中的注释。我们使用注释管理器来存储注释、检索注释、以及保存和恢复注释。
默认注释管理器
默认注释管理器 FrameOfReferenceSpecificAnnotationManager
基于 FrameOfReferenceUID
存储注释。
这意味着注释是为每个 FrameOfReferenceUID
分别存储的。
在我们当前的渲染管线中,如果两个 VolumeViewport 共享相同的 FrameOfReferenceUID
,则它们会共享相同的注释。然而,StackViewports 是基于每个 imageId 进行工作的,因此注释不会在 StackViewports 之间共享。
GroupKey
注释组通过 groupKey 来标识。groupKey 是一个字符串,用于标识注释组。
如上所述,默认的注释管理器是基于 FrameOfReferenceUID
存储注释的,因此 groupKey 是 FrameOfReferenceUID
。
自定义注释管理器
你可以通过实现 IAnnotationManager
接口来创建自己的自定义注释管理器:
interface IAnnotationManager {
getGroupKey: (annotationGroupSelector: any) => string;
getAnnotations: (
groupKey: string,
toolName?: string
) => Annotations | GroupSpecificAnnotations | undefined;
addAnnotation: (annotation: Annotation, groupKey?: string) => void;
removeAnnotation: (annotationUID: string) => void;
removeAnnotations: (groupKey: string, toolName?: string) => void;
saveAnnotations: (
groupKey?: string,
toolName?: string
) => AnnotationState | GroupSpecificAnnotations | Annotations;
restoreAnnotations: (
state: AnnotationState | GroupSpecificAnnotations | Annotations,
groupKey?: string,
toolName?: string
) => void;
getNumberOfAllAnnotations: () => number;
removeAllAnnotations: () => void;
}
要使用注释管理器,你可以通过以下方式将其设置为默认的注释管理器:
import { annotation } from '@cornerstonejs/tools';
import myCustomAnnotationManager from './myCustomAnnotationManager';
annotation.state.setAnnotationManager(myCustomAnnotationManager);
自定义注释管理器中最重要的方法是 getGroupKey
方法。
该方法用于确定给定元素的 groupKey
。例如,如果你有一个用例,在两个共享相同 FrameOfReferenceUID
的视口上显示两个独立的注释(例如两个不同的阅片器),你可以使用 getGroupKey
方法为每个视口返回不同的 groupKey
。(当然,你不希望在两个视口之间共享相同的注释)。