|
@@ -36,6 +36,7 @@ import PolylineLengthMeasurementTool from '@/components/measures/PolylineLengthM
|
|
|
import { PlaybackController } from '@/pages/view/components/playback/PlaybackController';
|
|
import { PlaybackController } from '@/pages/view/components/playback/PlaybackController';
|
|
|
import { FloatingPlaybackControls } from '@/pages/view/components/playback/FloatingPlaybackControls';
|
|
import { FloatingPlaybackControls } from '@/pages/view/components/playback/FloatingPlaybackControls';
|
|
|
import { getIpPort } from '@/API/config';
|
|
import { getIpPort } from '@/API/config';
|
|
|
|
|
+import { getRenderingEngine } from '@cornerstonejs/core';
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
MagnifyTool,
|
|
MagnifyTool,
|
|
@@ -53,6 +54,7 @@ const {
|
|
|
|
|
|
|
|
// 导入 cursors 用于光标管理
|
|
// 导入 cursors 用于光标管理
|
|
|
import { cursors } from '@cornerstonejs/tools';
|
|
import { cursors } from '@cornerstonejs/tools';
|
|
|
|
|
+import { message } from 'antd';
|
|
|
const { MouseBindings } = csToolsEnums;
|
|
const { MouseBindings } = csToolsEnums;
|
|
|
// 全局工具状态变化监听器注册标志
|
|
// 全局工具状态变化监听器注册标志
|
|
|
let cursorResetListenerRegistered = false;
|
|
let cursorResetListenerRegistered = false;
|
|
@@ -520,14 +522,23 @@ export function addCustomMark(currentViewportId: string, text: string): void {
|
|
|
console.error(`Element not found for viewport: ${currentViewportId}`);
|
|
console.error(`Element not found for viewport: ${currentViewportId}`);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+const renderingEngine = getRenderingEngine("myRenderingEngine");
|
|
|
|
|
+if(renderingEngine===undefined){
|
|
|
|
|
+ console.error(`Rendering engine not found for viewport: ${currentViewportId}`);
|
|
|
|
|
+ message.error(`添加注释失败`);
|
|
|
|
|
+ return;
|
|
|
|
|
+}
|
|
|
|
|
+ const viewport = renderingEngine.getViewport(currentViewportId);
|
|
|
// 计算标记位置(图像中心位置)
|
|
// 计算标记位置(图像中心位置)
|
|
|
- const elementHeight = element.getBoundingClientRect().height;
|
|
|
|
|
- const elementWidth = element.getBoundingClientRect().width;
|
|
|
|
|
- const position: Types.Point3 = [elementWidth / 2, elementHeight / 2, 0];
|
|
|
|
|
|
|
+ // 1️⃣ canvas 坐标(屏幕中心)
|
|
|
|
|
+ const { width, height } = element.getBoundingClientRect();
|
|
|
|
|
+ const canvasPoint: Types.Point2 = [width / 2, height / 2];
|
|
|
|
|
|
|
|
- // 添加标签
|
|
|
|
|
- LabelTool.hydrate(currentViewportId, position, text);
|
|
|
|
|
|
|
+ // 2️⃣ 转为 world 坐标(关键!)
|
|
|
|
|
+ const worldPoint = viewport.canvasToWorld(canvasPoint);
|
|
|
|
|
+
|
|
|
|
|
+ // 3️⃣ 使用 world 坐标 添加标签
|
|
|
|
|
+ LabelTool.hydrate(currentViewportId, worldPoint, text);
|
|
|
|
|
|
|
|
// 恢复工具状态
|
|
// 恢复工具状态
|
|
|
toolGroup.setToolPassive(LabelTool.toolName, {
|
|
toolGroup.setToolPassive(LabelTool.toolName, {
|