Просмотр исходного кода

fix: 修复点击删除测量导致崩溃的问题

- 新增 getLengthMeasurements 方法获取指定 viewport 的所有线段测量结果
- 新增 activateLengthToolForViewports 方法为多个 viewport 批量激活线段测量工具
- 新增 deactivateLengthToolForViewports 方法为多个 viewport 批量停用线段测量工具
- 新增 clearLengthMeasurementsForViewports 方法为多个 viewport 批量清除线段测量
- 增强测量工具管理器的批量操作能力
- 添加完整的错误处理和边界检查
- 更新版本号从 1.7.0 到 1.7.1
- 更新 CHANGELOG.md 记录本次修复

改动文件:
- package.json
- src/utils/measurementToolManager.ts
- CHANGELOG.md
dengdx 1 месяц назад
Родитель
Сommit
0d4bcfc1e8
3 измененных файлов с 81 добавлено и 1 удалено
  1. 21 0
      CHANGELOG.md
  2. 1 1
      package.json
  3. 59 0
      src/utils/measurementToolManager.ts

+ 21 - 0
CHANGELOG.md

@@ -5,6 +5,27 @@
 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
 
+## [1.7.1] - 2025-12-12 17:48
+
+### 修复 (Fixed)
+- **测量工具删除操作崩溃问题** ([src/utils/measurementToolManager.ts](src/utils/measurementToolManager.ts))
+  - 修复点击删除测量导致崩溃的问题
+  - 新增 `getLengthMeasurements` 方法获取指定 viewport 的所有线段测量结果
+  - 新增 `activateLengthToolForViewports` 方法为多个 viewport 批量激活线段测量工具
+  - 新增 `deactivateLengthToolForViewports` 方法为多个 viewport 批量停用线段测量工具
+  - 新增 `clearLengthMeasurementsForViewports` 方法为多个 viewport 批量清除线段测量
+
+**技术实现:**
+- 增强测量工具管理器的批量操作能力
+- 添加完整的错误处理和边界检查
+- 支持多 viewport 场景的测量工具管理
+
+**改动文件:**
+- package.json (版本更新: 1.7.0 -> 1.7.1)
+- src/utils/measurementToolManager.ts
+
+---
+
 ## [1.7.0] - 2025-12-12 17:14
 
 ### 修复 (Fixed)

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "zsis",
-  "version": "1.7.0",
+  "version": "1.7.1",
   "private": true,
   "description": "医学成像系统",
   "main": "main.js",

+ 59 - 0
src/utils/measurementToolManager.ts

@@ -249,6 +249,65 @@ export class MeasurementToolManager {
   }
 
 
+  /**
+   * 获取指定 viewport 的所有线段测量结果
+   */
+  // eslint-disable-next-line
+  static getLengthMeasurements(viewportId: string): any[] {
+    try {
+      const viewport =
+        cornerstone.getEnabledElementByViewportId(viewportId)?.viewport;
+      if (!viewport) {
+        console.warn(
+          `[MeasurementToolManager] Viewport not found: ${viewportId}`
+        );
+        return [];
+      }
+
+      const annotations = cornerstoneTools.annotation.state.getAnnotations(
+        LengthTool.toolName,
+        viewport.element
+      );
+
+      return annotations.map((annotation) => ({
+        annotationUID: annotation.annotationUID,
+        length: annotation.data?.cachedStats?.length || 0,
+        unit: annotation.data?.cachedStats?.unit || 'mm',
+        points: annotation.data?.handles?.points || [],
+      }));
+    } catch (error) {
+      console.error(
+        `[MeasurementToolManager] Error getting measurements:`,
+        error
+      );
+      return [];
+    }
+  }
+
+  /**
+   * 为多个 viewport 批量激活线段测量工具
+   */
+  static activateLengthToolForViewports(viewportIds: string[]): boolean[] {
+    return viewportIds.map((viewportId) => this.activateLengthTool(viewportId));
+  }
+
+  /**
+   * 为多个 viewport 批量停用线段测量工具
+   */
+  static deactivateLengthToolForViewports(viewportIds: string[]): boolean[] {
+    return viewportIds.map((viewportId) =>
+      this.deactivateLengthTool(viewportId)
+    );
+  }
+
+  /**
+   * 为多个 viewport 批量清除线段测量
+   */
+  static clearLengthMeasurementsForViewports(viewportIds: string[]): boolean[] {
+    return viewportIds.map((viewportId) =>
+      this.clearLengthMeasurements(viewportId)
+    );
+  }
 
   /**
    * 检查角度测量工具是否处于激活状态