跳到主要内容

适配器 API

主要变更

  • MeasurementsReport 改用两个 Map(而不是对象)来登记适配器类: 一个把工具类型映射到适配器类,另一个把追踪 id 映射到适配器类。
  • 新增了一个「注册额外追踪 id」的方法,允许添加自定义的适配器方法。
  • 适配器实现现在有了一个基类来承担部分定义工作。 这样就可以调用基类来处理诸如「是否为追踪项」这类判断。
  • MeasurementsReport 类现在可以被继承,从而创建一个默认处理逻辑 完全不同的新类。要做到这一点,需要重新声明那两个 Map 属性, 并为各处理器注册新的实例。
  • 现在有了一个 init 方法,用于创建追踪标识并注册新的处理器。
  • 标注变更事件不再需要 viewport id / rendering id
    • 这样改动是为了让标注在不可见时也能被更新
  • measurement report 不再接收影像与世界坐标之间的换算函数, 因为它已经由 @cornerstonejs/core/utilities 导出的方法提供
  • 适配器现在可以注水(hydrate)世界坐标,例如用于 MPR 重建

迁移步骤

1. 替换 MeasurementsReports.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE

迁移前:

- const toolClass = MeasurementReports.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolType];

迁移后:

+ const toolClass = MeasurementReports.measurementAdapterByToolType.get(toolType);

2. 替换那些与既有注册完全相同的工具实例适配器注册

迁移前:

- class MyNewToolAdapter { ... 与例如 Probe 适配器完全相同 }

迁移后:

+ const MyNewToolAdapter = Probe.initCopy('MyNewTool');

3. 用 registerTrackingIdentifier 替换旧的工具注册方式

迁移前:

- class OldToolAdapter { ... 与例如 Length v1.0 完全相同,只是追踪标识末尾带 :v1.0 }

迁移后:

+ MeasurementReport.registerTrackingIdentifier(Length, `${Length.trackingIdentifierTextValue}:v1.0`);

4. 在使用 MeasurementReport 时去掉影像与世界坐标的换算

迁移前:

// 用 cs3d 适配器生成 toolState。
let storedMeasurementByAnnotationType = MeasurementReport.generateToolState(
datasetToUse,
// 注意:我们需要把 imageIds 传给 dcmjs,因为要用它们做
// imageToWorld 变换。下面这段假定:测量被添加到该显示集的顺序
// 与实例中 measurementGroups 的顺序相同。
sopInstanceUIDToImageId,
metaData,
csUtilities.imageToWorldCoords
);

迁移后:

// 用 cs3d 适配器生成 toolState。
let storedMeasurementByAnnotationType = MeasurementReport.generateToolState(
datasetToUse,
// 注意:我们需要把 imageIds 传给 dcmjs,因为要用它们做
// imageToWorld 变换。下面这段假定:测量被添加到该显示集的顺序
// 与实例中 measurementGroups 的顺序相同。
sopInstanceUIDToImageId,
metaData
);
与原文的一处差异

官方英文原文中,上面第 1–3 步「迁移后」的 diff 代码块误用了 -(删除)标记, 与「迁移前」完全一样,看起来像是要把新写法也删掉。 这里已改为 +(新增),以符合其本意。