Merge branch 'main' into uat_us
commit
88b79e4aa1
|
|
@ -179,17 +179,18 @@
|
||||||
<Viewport ref="CT_AXIAL" :index="1" :active-index="activeIndex"
|
<Viewport ref="CT_AXIAL" :index="1" :active-index="activeIndex"
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="ctSeries"
|
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="ctSeries"
|
||||||
:rendering-engine-id="renderingEngineId" viewport-id="CT_AXIAL" :volume="ctVolume"
|
:rendering-engine-id="renderingEngineId" viewport-id="CT_AXIAL" :volume="ctVolume"
|
||||||
:measure-datas="measureDatas" :style="1 === activeIndex ? viewportStyle : {}" />
|
:measure-datas="measureDatas" :style="1 === activeIndex ? viewportStyle : {}"
|
||||||
|
@fusionSlicePointChange="handleFusionSlicePointChange" />
|
||||||
<Viewport ref="PT_AXIAL" :index="2" :active-index="activeIndex"
|
<Viewport ref="PT_AXIAL" :index="2" :active-index="activeIndex"
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
|
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
|
||||||
:rendering-engine-id="renderingEngineId" viewport-id="PT_AXIAL" :volume="ptVolume"
|
:rendering-engine-id="renderingEngineId" viewport-id="PT_AXIAL" :volume="ptVolume"
|
||||||
:measure-datas="measureDatas" :style="2 === activeIndex ? viewportStyle : {}"
|
:measure-datas="measureDatas" :style="2 === activeIndex ? viewportStyle : {}"
|
||||||
@upperRangeChange="upperRangeChange" />
|
@upperRangeChange="upperRangeChange" @fusionSlicePointChange="handleFusionSlicePointChange" />
|
||||||
<Viewport ref="FUSION_AXIAL" :index="3" :active-index="activeIndex"
|
<Viewport ref="FUSION_AXIAL" :index="3" :active-index="activeIndex"
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries" :ct-series-info="ctSeries"
|
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries" :ct-series-info="ctSeries"
|
||||||
:rendering-engine-id="renderingEngineId" viewport-id="FUSION_AXIAL" :volume="ptVolume"
|
:rendering-engine-id="renderingEngineId" viewport-id="FUSION_AXIAL" :volume="ptVolume"
|
||||||
:measure-datas="measureDatas" :rgb-preset-name="rgbPresetName" :style="3 === activeIndex ? viewportStyle : {}"
|
:measure-datas="measureDatas" :rgb-preset-name="rgbPresetName" :style="3 === activeIndex ? viewportStyle : {}"
|
||||||
@upperRangeChange="upperRangeChange" />
|
@upperRangeChange="upperRangeChange" @fusionSlicePointChange="handleFusionSlicePointChange" />
|
||||||
<Viewport ref="PET_MIP_CORONAL" :index="4" :active-index="activeIndex"
|
<Viewport ref="PET_MIP_CORONAL" :index="4" :active-index="activeIndex"
|
||||||
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
|
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
|
||||||
:rendering-engine-id="renderingEngineId" viewport-id="PET_MIP_CORONAL" :measure-datas="measureDatas"
|
:rendering-engine-id="renderingEngineId" viewport-id="PET_MIP_CORONAL" :measure-datas="measureDatas"
|
||||||
|
|
@ -259,7 +260,7 @@ import CustomWwwcForm from './../CustomWwwcForm'
|
||||||
import FusionForm from './FusionForm.vue'
|
import FusionForm from './FusionForm.vue'
|
||||||
import { getTableAnswerRowInfoList, getDicomSeriesInfo } from '@/api/trials'
|
import { getTableAnswerRowInfoList, getDicomSeriesInfo } from '@/api/trials'
|
||||||
import FusionEvent from './FusionEvent'
|
import FusionEvent from './FusionEvent'
|
||||||
import FusionJumpToPointTool from '../../../dicoms3D/components/tools/FusionJumpToPointTool'
|
import FusionJumpToPointTool from '../../../dicoms3D/components/tools/FusionJumpToPointTool'
|
||||||
// import { ColorMaps } from '@kitware/vtk.js/Common/Core/ColorMaps'
|
// import { ColorMaps } from '@kitware/vtk.js/Common/Core/ColorMaps'
|
||||||
import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'
|
import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'
|
||||||
import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'
|
import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'
|
||||||
|
|
@ -425,12 +426,12 @@ export default {
|
||||||
fusion: { visible: false }, // 历史记录融合调窗
|
fusion: { visible: false }, // 历史记录融合调窗
|
||||||
screenshotWindow: null,
|
screenshotWindow: null,
|
||||||
hasVoiChanged: false,
|
hasVoiChanged: false,
|
||||||
lastUpper: null,
|
lastUpper: null,
|
||||||
fusionCrosshairStyle: {
|
fusionCrosshairStyle: {
|
||||||
lineWidth: 2,
|
lineWidth: 2,
|
||||||
lineLength: 20,
|
lineLength: 20,
|
||||||
centerHoleSize: 20,
|
centerHoleSize: 20,
|
||||||
}
|
}
|
||||||
// initFirstAnnotation:false
|
// initFirstAnnotation:false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -628,7 +629,7 @@ export default {
|
||||||
this.setUpToolGroups()
|
this.setUpToolGroups()
|
||||||
|
|
||||||
this.setUpSynchronizers()
|
this.setUpSynchronizers()
|
||||||
this.dispatchFusionCenterPoint()
|
this.dispatchFusionCenterPoint()
|
||||||
// this.$refs['CT_AXIAL'].scroll(0)
|
// this.$refs['CT_AXIAL'].scroll(0)
|
||||||
// this.$refs['PT_AXIAL'].scroll(0)
|
// this.$refs['PT_AXIAL'].scroll(0)
|
||||||
// this.$refs['FUSION_AXIAL'].scroll(0)
|
// this.$refs['FUSION_AXIAL'].scroll(0)
|
||||||
|
|
@ -980,7 +981,7 @@ export default {
|
||||||
cornerstoneTools.addTool(WindowLevelTool)
|
cornerstoneTools.addTool(WindowLevelTool)
|
||||||
cornerstoneTools.addTool(ZoomTool)
|
cornerstoneTools.addTool(ZoomTool)
|
||||||
cornerstoneTools.addTool(StackScrollTool)
|
cornerstoneTools.addTool(StackScrollTool)
|
||||||
cornerstoneTools.addTool(FusionJumpToPointTool)
|
cornerstoneTools.addTool(FusionJumpToPointTool)
|
||||||
cornerstoneTools.addTool(VolumeRotateTool)
|
cornerstoneTools.addTool(VolumeRotateTool)
|
||||||
cornerstoneTools.addTool(EllipticalROITool)
|
cornerstoneTools.addTool(EllipticalROITool)
|
||||||
cornerstoneTools.addTool(CircleROITool)
|
cornerstoneTools.addTool(CircleROITool)
|
||||||
|
|
@ -1012,7 +1013,7 @@ export default {
|
||||||
toolGroup.addTool(ProbeTool.toolName)
|
toolGroup.addTool(ProbeTool.toolName)
|
||||||
toolGroup.addTool(ScaleOverlayTool.toolName)
|
toolGroup.addTool(ScaleOverlayTool.toolName)
|
||||||
toolGroup.addTool(OrientationMarkerTool.toolName)
|
toolGroup.addTool(OrientationMarkerTool.toolName)
|
||||||
toolGroup.addTool(FusionJumpToPointTool.toolName, this.getFusionJumpToolConfiguration())
|
toolGroup.addTool(FusionJumpToPointTool.toolName, this.getFusionJumpToolConfiguration())
|
||||||
})
|
})
|
||||||
|
|
||||||
fusionToolGroup.addTool(PanTool.toolName)
|
fusionToolGroup.addTool(PanTool.toolName)
|
||||||
|
|
@ -1028,7 +1029,7 @@ export default {
|
||||||
fusionToolGroup.addTool(ProbeTool.toolName)
|
fusionToolGroup.addTool(ProbeTool.toolName)
|
||||||
fusionToolGroup.addTool(ScaleOverlayTool.toolName)
|
fusionToolGroup.addTool(ScaleOverlayTool.toolName)
|
||||||
fusionToolGroup.addTool(OrientationMarkerTool.toolName)
|
fusionToolGroup.addTool(OrientationMarkerTool.toolName)
|
||||||
fusionToolGroup.addTool(FusionJumpToPointTool.toolName, this.getFusionJumpToolConfiguration())
|
fusionToolGroup.addTool(FusionJumpToPointTool.toolName, this.getFusionJumpToolConfiguration())
|
||||||
// Here is the difference in the toolGroups used, that we need to specify the
|
// Here is the difference in the toolGroups used, that we need to specify the
|
||||||
// volume to use for the WindowLevelTool for the fusion viewports
|
// volume to use for the WindowLevelTool for the fusion viewports
|
||||||
|
|
||||||
|
|
@ -1080,13 +1081,13 @@ export default {
|
||||||
true // overwrite
|
true // overwrite
|
||||||
)
|
)
|
||||||
toolGroup.setToolEnabled(ScaleOverlayTool.toolName)
|
toolGroup.setToolEnabled(ScaleOverlayTool.toolName)
|
||||||
toolGroup.setToolActive(FusionJumpToPointTool.toolName, {
|
toolGroup.setToolActive(FusionJumpToPointTool.toolName, {
|
||||||
bindings: [
|
bindings: [
|
||||||
{
|
{
|
||||||
mouseButton: MouseBindings.Primary // Left Click
|
mouseButton: MouseBindings.Primary // Left Click
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
// toolGroup.setToolConfiguration(OrientationMarkerTool.toolName, {
|
// toolGroup.setToolConfiguration(OrientationMarkerTool.toolName, {
|
||||||
// orientationWidget: {
|
// orientationWidget: {
|
||||||
// enabled: true,
|
// enabled: true,
|
||||||
|
|
@ -1138,11 +1139,11 @@ export default {
|
||||||
mipToolGroup.setToolActive(VolumeRotateTool.toolName, {
|
mipToolGroup.setToolActive(VolumeRotateTool.toolName, {
|
||||||
bindings: [{ mouseButton: MouseBindings.Wheel }],
|
bindings: [{ mouseButton: MouseBindings.Wheel }],
|
||||||
});
|
});
|
||||||
mipToolGroup.addTool(FusionJumpToPointTool.toolName, this.getFusionJumpToolConfiguration())
|
mipToolGroup.addTool(FusionJumpToPointTool.toolName, this.getFusionJumpToolConfiguration())
|
||||||
|
|
||||||
// Set the initial state of the tools, here we set one tool active on left click.
|
// Set the initial state of the tools, here we set one tool active on left click.
|
||||||
// This means left click will draw that tool.
|
// This means left click will draw that tool.
|
||||||
mipToolGroup.setToolActive(FusionJumpToPointTool.toolName, {
|
mipToolGroup.setToolActive(FusionJumpToPointTool.toolName, {
|
||||||
bindings: [
|
bindings: [
|
||||||
{
|
{
|
||||||
mouseButton: MouseBindings.Primary // Left ClickR
|
mouseButton: MouseBindings.Primary // Left ClickR
|
||||||
|
|
@ -1156,81 +1157,111 @@ export default {
|
||||||
// mipToolGroup.setToolActive(OrientationMarkerTool.toolName)
|
// mipToolGroup.setToolActive(OrientationMarkerTool.toolName)
|
||||||
mipToolGroup.addViewport(viewportIds.PETMIP.CORONAL, renderingEngineId)
|
mipToolGroup.addViewport(viewportIds.PETMIP.CORONAL, renderingEngineId)
|
||||||
},
|
},
|
||||||
getFusionJumpToolConfiguration() {
|
getFusionJumpToolConfiguration() {
|
||||||
return {
|
return {
|
||||||
targetViewportIds: [
|
targetViewportIds: [
|
||||||
viewportIds.CT.AXIAL,
|
viewportIds.CT.AXIAL,
|
||||||
viewportIds.PT.AXIAL,
|
viewportIds.PT.AXIAL,
|
||||||
viewportIds.FUSION.AXIAL,
|
viewportIds.FUSION.AXIAL,
|
||||||
viewportIds.PETMIP.CORONAL
|
viewportIds.PETMIP.CORONAL
|
||||||
],
|
],
|
||||||
useBrightestPoint: true,
|
useBrightestPoint: true,
|
||||||
jumpToTargetViewports: true,
|
jumpToTargetViewports: true,
|
||||||
dispatchEventName: 'fusion-mip-point-selected',
|
dispatchEventName: 'fusion-mip-point-selected',
|
||||||
getReferenceLineColor: this.setFusionCrosshairsToolLineColor,
|
getReferenceLineColor: this.setFusionCrosshairsToolLineColor,
|
||||||
style: this.fusionCrosshairStyle,
|
style: this.fusionCrosshairStyle,
|
||||||
referenceLinesCenterGapRadius: this.fusionCrosshairStyle.centerHoleSize,
|
referenceLinesCenterGapRadius: this.fusionCrosshairStyle.centerHoleSize,
|
||||||
minimal: {
|
minimal: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
lineLengthInPx: this.fusionCrosshairStyle.lineLength,
|
lineLengthInPx: this.fusionCrosshairStyle.lineLength,
|
||||||
},
|
},
|
||||||
mipViewportIds: [viewportIds.PETMIP.CORONAL]
|
mipViewportIds: [viewportIds.PETMIP.CORONAL]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setFusionCrosshairsToolLineColor(viewportId) {
|
setFusionCrosshairsToolLineColor(viewportId) {
|
||||||
const colors = {
|
const colors = {
|
||||||
[viewportIds.CT.AXIAL]: '#0000ff',
|
[viewportIds.CT.AXIAL]: '#0000ff',
|
||||||
[viewportIds.PT.AXIAL]: '#0000ff',
|
[viewportIds.PT.AXIAL]: '#0000ff',
|
||||||
[viewportIds.FUSION.AXIAL]: '#0000ff',
|
[viewportIds.FUSION.AXIAL]: '#0000ff',
|
||||||
[viewportIds.PETMIP.CORONAL]: '#ff0000'
|
[viewportIds.PETMIP.CORONAL]: '#ff0000'
|
||||||
}
|
}
|
||||||
return colors[viewportId] || '#0000ff'
|
return colors[viewportId] || '#0000ff'
|
||||||
},
|
},
|
||||||
dispatchFusionCenterPoint(retryCount = 0) {
|
handleFusionSlicePointChange({ viewportId, worldPoint }) {
|
||||||
const renderEngine = getRenderingEngine(renderingEngineId)
|
if (!this.isFusion) return
|
||||||
if (!renderEngine) return
|
if (!viewportId || !Array.isArray(worldPoint) || worldPoint.length < 3) return
|
||||||
const toolGroupCandidates = [fusionToolGroupId, mipToolGroupUID, ptToolGroupId, ctToolGroupId]
|
if (viewportId === viewportIds.PETMIP.CORONAL) return
|
||||||
let instance = null
|
|
||||||
for (const toolGroupId of toolGroupCandidates) {
|
const activeViewportId = this.activeIndex === 1
|
||||||
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
? viewportIds.CT.AXIAL
|
||||||
instance = toolGroup?.getToolInstance?.(FusionJumpToPointTool.toolName)
|
: this.activeIndex === 2
|
||||||
if (instance?.setPoint) break
|
? viewportIds.PT.AXIAL
|
||||||
}
|
: this.activeIndex === 3
|
||||||
if (!instance?.setPoint) {
|
? viewportIds.FUSION.AXIAL
|
||||||
if (retryCount < 10) {
|
: viewportIds.PETMIP.CORONAL
|
||||||
setTimeout(() => {
|
if (viewportId !== activeViewportId) return
|
||||||
this.dispatchFusionCenterPoint(retryCount + 1)
|
|
||||||
}, 120)
|
const renderEngine = getRenderingEngine(renderingEngineId)
|
||||||
}
|
if (!renderEngine) return
|
||||||
return
|
const toolGroupCandidates = [fusionToolGroupId, mipToolGroupUID, ptToolGroupId, ctToolGroupId]
|
||||||
}
|
let instance = null
|
||||||
|
for (const toolGroupId of toolGroupCandidates) {
|
||||||
const candidates = [viewportIds.FUSION.AXIAL, viewportIds.PT.AXIAL, viewportIds.CT.AXIAL]
|
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
||||||
for (const viewportId of candidates) {
|
instance = toolGroup?.getToolInstance(FusionJumpToPointTool.toolName)
|
||||||
const viewport = renderEngine.getViewport(viewportId)
|
if (instance?.setPoint) break
|
||||||
if (!viewport) continue
|
}
|
||||||
const width = viewport.element?.clientWidth
|
if (!instance?.setPoint) return
|
||||||
const height = viewport.element?.clientHeight
|
|
||||||
let worldPoint = null
|
instance.setPoint(worldPoint, viewportId, renderEngine.id, {
|
||||||
if (width && height && viewport.canvasToWorld) {
|
jumpToTargetViewports: false,
|
||||||
worldPoint = viewport.canvasToWorld([width / 2, height / 2])
|
dispatchEvent: false,
|
||||||
}
|
})
|
||||||
if ((!worldPoint || worldPoint.length < 3) && viewport.getCamera) {
|
},
|
||||||
worldPoint = viewport.getCamera()?.focalPoint
|
dispatchFusionCenterPoint(retryCount = 0) {
|
||||||
}
|
const renderEngine = getRenderingEngine(renderingEngineId)
|
||||||
if (!worldPoint || worldPoint.length < 3) continue
|
if (!renderEngine) return
|
||||||
instance.setPoint(worldPoint, viewportId, renderEngine.id, {
|
const toolGroupCandidates = [fusionToolGroupId, mipToolGroupUID, ptToolGroupId, ctToolGroupId]
|
||||||
jumpToTargetViewports: true,
|
let instance = null
|
||||||
dispatchEvent: false,
|
for (const toolGroupId of toolGroupCandidates) {
|
||||||
})
|
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
||||||
return
|
instance = toolGroup?.getToolInstance?.(FusionJumpToPointTool.toolName)
|
||||||
}
|
if (instance?.setPoint) break
|
||||||
if (retryCount < 10) {
|
}
|
||||||
setTimeout(() => {
|
if (!instance?.setPoint) {
|
||||||
this.dispatchFusionCenterPoint(retryCount + 1)
|
if (retryCount < 10) {
|
||||||
}, 120)
|
setTimeout(() => {
|
||||||
}
|
this.dispatchFusionCenterPoint(retryCount + 1)
|
||||||
},
|
}, 120)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const candidates = [viewportIds.FUSION.AXIAL, viewportIds.PT.AXIAL, viewportIds.CT.AXIAL]
|
||||||
|
for (const viewportId of candidates) {
|
||||||
|
const viewport = renderEngine.getViewport(viewportId)
|
||||||
|
if (!viewport) continue
|
||||||
|
const width = viewport.element?.clientWidth
|
||||||
|
const height = viewport.element?.clientHeight
|
||||||
|
let worldPoint = null
|
||||||
|
if (width && height && viewport.canvasToWorld) {
|
||||||
|
worldPoint = viewport.canvasToWorld([width / 2, height / 2])
|
||||||
|
}
|
||||||
|
if ((!worldPoint || worldPoint.length < 3) && viewport.getCamera) {
|
||||||
|
worldPoint = viewport.getCamera()?.focalPoint
|
||||||
|
}
|
||||||
|
if (!worldPoint || worldPoint.length < 3) continue
|
||||||
|
instance.setPoint(worldPoint, viewportId, renderEngine.id, {
|
||||||
|
jumpToTargetViewports: true,
|
||||||
|
dispatchEvent: false,
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (retryCount < 10) {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.dispatchFusionCenterPoint(retryCount + 1)
|
||||||
|
}, 120)
|
||||||
|
}
|
||||||
|
},
|
||||||
getTextLines(data, targetId) {
|
getTextLines(data, targetId) {
|
||||||
const cachedVolumeStats = data.cachedStats[targetId]
|
const cachedVolumeStats = data.cachedStats[targetId]
|
||||||
const {
|
const {
|
||||||
|
|
|
||||||
|
|
@ -272,6 +272,24 @@ export default {
|
||||||
this.renderColorBar(this.presetName)
|
this.renderColorBar(this.presetName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.index !== 4 && viewport) {
|
||||||
|
const width = viewport.element.clientWidth
|
||||||
|
const height = viewport.element.clientHeight
|
||||||
|
let worldPoint = null
|
||||||
|
if (width && height && viewport.canvasToWorld) {
|
||||||
|
worldPoint = viewport.canvasToWorld([width / 2, height / 2])
|
||||||
|
}
|
||||||
|
if ((!worldPoint || worldPoint.length < 3) && viewport.getCamera) {
|
||||||
|
worldPoint = viewport.getCamera()?.focalPoint
|
||||||
|
}
|
||||||
|
if (Array.isArray(worldPoint) && worldPoint.length >= 3) {
|
||||||
|
this.$emit('fusionSlicePointChange', {
|
||||||
|
viewportId: this.viewportId,
|
||||||
|
worldPoint: [...worldPoint]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
getOrientationMarker() {
|
getOrientationMarker() {
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
|
|
||||||
|
|
@ -270,6 +270,24 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this.isMip && viewport) {
|
||||||
|
const width = this.element?.clientWidth
|
||||||
|
const height = this.element?.clientHeight
|
||||||
|
let worldPoint = null
|
||||||
|
if (width && height && viewport.canvasToWorld) {
|
||||||
|
worldPoint = viewport.canvasToWorld([width / 2, height / 2])
|
||||||
|
}
|
||||||
|
if ((!worldPoint || worldPoint.length < 3) && viewport.getCamera) {
|
||||||
|
worldPoint = viewport.getCamera()?.focalPoint
|
||||||
|
}
|
||||||
|
if (Array.isArray(worldPoint) && worldPoint.length >= 3) {
|
||||||
|
this.$emit('fusionSlicePointChange', {
|
||||||
|
viewportId: this.viewportId,
|
||||||
|
worldPoint: [...worldPoint],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
setFullScreen(index) {
|
setFullScreen(index) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@
|
||||||
:viewport-index="index" :active-tool="activeTool" @activeViewport="activeViewport"
|
:viewport-index="index" :active-tool="activeTool" @activeViewport="activeViewport"
|
||||||
@toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD"
|
@toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD"
|
||||||
@renderAnnotations="renderAnnotations" @upperRangeChange="upperRangeChange"
|
@renderAnnotations="renderAnnotations" @upperRangeChange="upperRangeChange"
|
||||||
@contentMouseup="contentMouseup" />
|
@contentMouseup="contentMouseup" @fusionSlicePointChange="handleFusionSlicePointChange" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="readingTool === 2" class="fusion-hidden-viewports">
|
<div v-if="readingTool === 2" class="fusion-hidden-viewports">
|
||||||
|
|
@ -2634,6 +2634,25 @@ export default {
|
||||||
if (this.isFusion) return [this.fusionToolGroupId]
|
if (this.isFusion) return [this.fusionToolGroupId]
|
||||||
return [`${this.viewportKey}-0`, `${this.viewportKey}-1`, `${this.viewportKey}-2`, `${this.viewportKey}-3`]
|
return [`${this.viewportKey}-0`, `${this.viewportKey}-1`, `${this.viewportKey}-2`, `${this.viewportKey}-3`]
|
||||||
},
|
},
|
||||||
|
handleFusionSlicePointChange({ viewportId, worldPoint }) {
|
||||||
|
if (!this.isFusion) return
|
||||||
|
if (!viewportId || !Array.isArray(worldPoint) || worldPoint.length < 3) return
|
||||||
|
|
||||||
|
const activeFusionViewportId = `viewport-fusion-${this.activeViewportIndex}`
|
||||||
|
if (viewportId !== activeFusionViewportId) return
|
||||||
|
if (viewportId === 'viewport-fusion-3') return
|
||||||
|
|
||||||
|
const renderingEngine = getRenderingEngine(renderingEngineId)
|
||||||
|
if (!renderingEngine) return
|
||||||
|
const toolGroup = ToolGroupManager.getToolGroup(this.fusionToolGroupId)
|
||||||
|
const instance = toolGroup?.getToolInstance(FusionJumpToPointTool.toolName)
|
||||||
|
if (!instance?.setPoint) return
|
||||||
|
|
||||||
|
instance.setPoint(worldPoint, viewportId, renderingEngine.id, {
|
||||||
|
jumpToTargetViewports: false,
|
||||||
|
dispatchEvent: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
setFusionMipJumpEnabled(enabled) {
|
setFusionMipJumpEnabled(enabled) {
|
||||||
if (!this.isFusion) return
|
if (!this.isFusion) return
|
||||||
const toolGroup = ToolGroupManager.getToolGroup(this.fusionToolGroupId)
|
const toolGroup = ToolGroupManager.getToolGroup(this.fusionToolGroupId)
|
||||||
|
|
@ -3455,6 +3474,10 @@ export default {
|
||||||
async toggleTaskByViewport(obj) {
|
async toggleTaskByViewport(obj) {
|
||||||
const i = this.visitTaskList.findIndex(v => v.VisitTaskNum === obj.visitTaskNum)
|
const i = this.visitTaskList.findIndex(v => v.VisitTaskNum === obj.visitTaskNum)
|
||||||
if (i === -1) return
|
if (i === -1) return
|
||||||
|
if (this.readingTool === 3) {
|
||||||
|
let res = await this.changeScreenSave()
|
||||||
|
if (!res) return false
|
||||||
|
}
|
||||||
this.activeTaskId = this.visitTaskList[i].VisitTaskId
|
this.activeTaskId = this.visitTaskList[i].VisitTaskId
|
||||||
this.activeTaskIndex = i
|
this.activeTaskIndex = i
|
||||||
if (!this.selectArr.includes(this.activeTaskId)) {
|
if (!this.selectArr.includes(this.activeTaskId)) {
|
||||||
|
|
@ -3490,6 +3513,11 @@ export default {
|
||||||
this.setToolsPassive()
|
this.setToolsPassive()
|
||||||
},
|
},
|
||||||
async activeSeries(obj) {
|
async activeSeries(obj) {
|
||||||
|
if (this.readingTool === 3) {
|
||||||
|
let res = await this.changeScreenSave()
|
||||||
|
if (!res) return false
|
||||||
|
DicomEvent.$emit('activeSeries', obj)
|
||||||
|
}
|
||||||
if (this.isFusion || this.isMPR) {
|
if (this.isFusion || this.isMPR) {
|
||||||
if (this.isFusion && this.$refs[`ecrf_${this.taskInfo.VisitTaskId}`][0].verifyAnnotationIsSave()) {
|
if (this.isFusion && this.$refs[`ecrf_${this.taskInfo.VisitTaskId}`][0].verifyAnnotationIsSave()) {
|
||||||
const confirm = await this.$confirm(this.$t('trials:reading:confirm:clearnAnnotation'))
|
const confirm = await this.$confirm(this.$t('trials:reading:confirm:clearnAnnotation'))
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@
|
||||||
</el-switch>
|
</el-switch>
|
||||||
<span style="margin-left: 5px;">{{
|
<span style="margin-left: 5px;">{{
|
||||||
$t('trials:reading:Segmentations:title:InactiveSegmentationsShow')
|
$t('trials:reading:Segmentations:title:InactiveSegmentationsShow')
|
||||||
}}</span>
|
}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template v-if="segmentList.length > 0">
|
<template v-if="segmentList.length > 0">
|
||||||
|
|
@ -171,11 +171,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="addSegmentBox" @click.stop="addSegment"
|
<div class="addSegmentBox" @click.stop="addSegment"
|
||||||
style="display: flex;align-items: center;justify-content: space-between;"
|
style="display: flex;align-items: center;justify-content: space-between;">
|
||||||
v-if="readingTaskState < 2">
|
<span v-if="readingTaskState < 2"><i class="el-icon-plus"></i>
|
||||||
<span><i class="el-icon-plus"></i>
|
|
||||||
{{ $t('trials:reading:Segmentations:button:addSegment') }}
|
{{ $t('trials:reading:Segmentations:button:addSegment') }}
|
||||||
</span>
|
</span>
|
||||||
|
<span style="width: 10px;" v-else></span>
|
||||||
<svg-icon :icon-class="!curSegmentGroup.view ? 'eye' : 'eye-open'"
|
<svg-icon :icon-class="!curSegmentGroup.view ? 'eye' : 'eye-open'"
|
||||||
@click.stop="viewSegmentGroup(segmentList.find(i => i.segmentationId === segmentationId))" />
|
@click.stop="viewSegmentGroup(segmentList.find(i => i.segmentationId === segmentationId))" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -977,7 +977,7 @@ export default {
|
||||||
this.selectSegment(this.segmentList[groupIndex].segments[0])
|
this.selectSegment(this.segmentList[groupIndex].segments[0])
|
||||||
}
|
}
|
||||||
this.$emit('resetQuestion')
|
this.$emit('resetQuestion')
|
||||||
this.saveSegmentGroup([this.segmentList[groupIndex]], false)
|
this.saveSegmentGroup([this.segmentList[groupIndex]], true)
|
||||||
|
|
||||||
},
|
},
|
||||||
resetViewport(passive = true) {
|
resetViewport(passive = true) {
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-if="series.Description" class="text-desc" :title="series.Description">
|
<div v-if="series.Description" class="text-desc" :title="series.Description">
|
||||||
{{ series.Description }}
|
{{ series.Description }}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div v-if="series.SliceThickness && !study.IsCriticalSequence" class="text-desc">
|
<div v-if="series.SliceThickness && !study.IsCriticalSequence" class="text-desc">
|
||||||
T: {{ parseFloat(series.SliceThickness).toFixed(digitPlaces) }}
|
T: {{ parseFloat(series.SliceThickness).toFixed(digitPlaces) }}
|
||||||
|
|
@ -199,10 +199,9 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
activeSeries(series, seriesIndex, studyIndex) {
|
activeSeries(series, seriesIndex, studyIndex) {
|
||||||
|
this.$emit('activeSeries', series)
|
||||||
this.activeStudyIndex = studyIndex
|
this.activeStudyIndex = studyIndex
|
||||||
this.activeSeriesIndex = seriesIndex
|
this.activeSeriesIndex = seriesIndex
|
||||||
this.$emit('activeSeries', series)
|
|
||||||
DicomEvent.$emit('activeSeries', series)
|
|
||||||
},
|
},
|
||||||
activeStudy(id) {
|
activeStudy(id) {
|
||||||
if (this.activeNames.indexOf(id) > -1) return
|
if (this.activeNames.indexOf(id) > -1) return
|
||||||
|
|
@ -267,6 +266,7 @@ export default {
|
||||||
// display: inline-block;
|
// display: inline-block;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.patient-info-popper {
|
.patient-info-popper {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #ddd;
|
color: #ddd;
|
||||||
|
|
@ -291,7 +291,7 @@ export default {
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.patient-info-popper .patient-info-row + .patient-info-row {
|
.patient-info-popper .patient-info-row+.patient-info-row {
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue