From 4aa1a05ea94a2d5efe2b7e74ec4562a878cc08fb Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Tue, 28 Apr 2026 13:39:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E4=BD=8D=E5=B7=A5=E5=85=B7=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/tools/FusionJumpToPointTool.js | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/tools/FusionJumpToPointTool.js b/src/views/trials/trials-panel/reading/dicoms3D/components/tools/FusionJumpToPointTool.js index 27b06361..4c2ba603 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/tools/FusionJumpToPointTool.js +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/tools/FusionJumpToPointTool.js @@ -40,17 +40,23 @@ class FusionJumpToPointTool extends AnnotationDisplayTool { return } const { element, currentPoints } = evt.detail || {} - const worldPoint = currentPoints?.world - if (!element || !worldPoint || worldPoint.length < 3) return + if (!element || !currentPoints) return const enabledElement = getEnabledElement(element) const { viewport, renderingEngine } = enabledElement || {} if (!viewport || !renderingEngine) return - const selectedPoint = this._resolveSelectedPoint(viewport, worldPoint) + const sourceIsMip = this._isMipViewportId(viewport.id) + const interactionWorldPoint = this._getInteractionWorldPoint(viewport, currentPoints, !sourceIsMip) + if (!interactionWorldPoint || interactionWorldPoint.length < 3) return + const selectedPoint = sourceIsMip + ? this._resolveSelectedPoint(viewport, interactionWorldPoint) + : interactionWorldPoint if (!selectedPoint || selectedPoint.length < 3) return - this.setPoint(selectedPoint, viewport.id, renderingEngine.id) + this.setPoint(selectedPoint, viewport.id, renderingEngine.id, { + jumpToTargetViewports: sourceIsMip, + }) } mouseDownCallback(evt) { @@ -70,15 +76,14 @@ class FusionJumpToPointTool extends AnnotationDisplayTool { const { viewport, renderingEngine } = enabledElement || {} if (!viewport || !renderingEngine) return - let worldPoint = currentPoints?.world - if ((!worldPoint || worldPoint.length < 3) && currentPoints?.canvas && viewport.canvasToWorld) { - worldPoint = viewport.canvasToWorld(currentPoints.canvas) - } + const sourceIsMip = this._isMipViewportId(viewport.id) + const worldPoint = this._getInteractionWorldPoint(viewport, currentPoints, !sourceIsMip) if (!worldPoint || worldPoint.length < 3) return const annotation = this._getViewportCrosshairAnnotation(viewport) - const sourceViewportId = this.dragSourceViewportId || annotation?.data?.sourceViewportId || viewport.id - const sourceIsMip = this._isMipViewportId(viewport.id) + const sourceViewportId = sourceIsMip + ? (this.dragSourceViewportId || annotation?.data?.sourceViewportId || viewport.id) + : viewport.id this.setPoint(worldPoint, sourceViewportId, renderingEngine.id, { jumpToTargetViewports: sourceIsMip, }) @@ -345,6 +350,27 @@ class FusionJumpToPointTool extends AnnotationDisplayTool { return true } + _getInteractionWorldPoint(viewport, currentPoints, preferCanvasToWorld = false) { + const worldPoint = currentPoints?.world + const canvasPoint = currentPoints?.canvas + if (preferCanvasToWorld && canvasPoint && viewport?.canvasToWorld) { + const worldFromCanvas = viewport.canvasToWorld(canvasPoint) + if (worldFromCanvas && worldFromCanvas.length >= 3) { + return worldFromCanvas + } + } + if (worldPoint && worldPoint.length >= 3) { + return worldPoint + } + if (canvasPoint && viewport?.canvasToWorld) { + const worldFromCanvas = viewport.canvasToWorld(canvasPoint) + if (worldFromCanvas && worldFromCanvas.length >= 3) { + return worldFromCanvas + } + } + return null + } + _dispatchPointEvent(worldPoint, sourceViewportId, crosshairAppearance) { const { dispatchEventName } = this.configuration if (!dispatchEventName || typeof window === 'undefined') return