diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue index 32110df8..14908576 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue @@ -1926,6 +1926,7 @@ export default { console.log('Completed') const { annotation } = e.detail if (!annotation) return + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation) if (this.readingTaskState === 2) return if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return @@ -1952,6 +1953,7 @@ export default { console.log('Modified') const { annotation } = e.detail if (!annotation) return + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation) if (this.readingTaskState === 2) return if (!annotation.highlighted) return @@ -1968,6 +1970,7 @@ export default { const { annotation } = e.detail try { if (!annotation) return + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName === CrosshairsTool.toolName) return if (this.readingTaskState === 2 && !annotation.data.label) return false if (this.readingTaskState === 2) { @@ -1997,6 +2000,7 @@ export default { async customAnnotationCompletedListener(e) { const { annotation } = e.detail if (!annotation) return + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation) if (this.readingTaskState === 2) return const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName) @@ -2085,6 +2089,7 @@ export default { customAnnotationModifiedListener(e) { const { annotation } = e.detail if (!annotation) return + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation) if (this.readingTaskState === 2) return if (!annotation.highlighted) return @@ -2114,6 +2119,7 @@ export default { try { // if ( this.resetAnnotation && this.isFusion ) return false if (!annotation) return false + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return false if (annotation.metadata.toolName === CrosshairsTool.toolName) return false if (this.readingTaskState === 2 && !annotation.data.label) return false if (this.readingTaskState === 2) { @@ -2218,7 +2224,11 @@ export default { } } }, - annotationSelectionChangeListener(e) { }, + annotationSelectionChangeListener(e) { + const { annotation } = e.detail || {} + if (!annotation) return + if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return + }, async getAnnotations(visitTaskId) { if (this.readingTaskState === 2) return const taskIdx = this.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId) 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 diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue b/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue index 39388075..39e45a68 100644 --- a/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue +++ b/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue @@ -521,7 +521,7 @@ export default { IsImageFilter: false, KeyFileListStr: '', KeyFileList: [], - CircleRadius: null + CircleRadius: 10 }, rules: { IsAutoCreate: [ @@ -1063,7 +1063,7 @@ export default { }, handleReadingToolListChange(v) { if (!v.includes('FixedRadiusCircleROI')) { - this.form.CircleRadius = null + this.form.CircleRadius = 10 } }, handleNumberInput(value, field) {