From 0280dfb9598b3c684e1deaaf13045127922d947e Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Wed, 14 May 2025 15:48:08 +0800 Subject: [PATCH] =?UTF-8?q?lugano=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dicoms/components/Fusion/PetCt.vue | 171 ++++++++++-------- 1 file changed, 99 insertions(+), 72 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue index 74655d93..6ffcbff9 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue @@ -247,11 +247,11 @@ - + - + @@ -352,6 +352,7 @@ const mipToolGroupUID = 'MIP_TOOLGROUP_ID' var axialCameraPositionSynchronizer var ctVoiSynchronizer var ptVoiSynchronizer +var fusionVoiSynchronizer const viewportIds = { CT: { AXIAL: 'CT_AXIAL', SAGITTAL: 'CT_SAGITTAL', CORONAL: 'CT_CORONAL' }, PT: { AXIAL: 'PT_AXIAL', SAGITTAL: 'PT_SAGITTAL', CORONAL: 'PT_CORONAL' }, @@ -376,6 +377,7 @@ var mipToolGroup const axialCameraSynchronizerId = 'AXIAL_CAMERA_SYNCHRONIZER_ID' const ctVoiSynchronizerId = 'CT_VOI_SYNCHRONIZER_ID' const ptVoiSynchronizerId = 'PT_VOI_SYNCHRONIZER_ID' +const fusionVoiSynchronizerId = 'FUSION_VOI_SYNCHRONIZER_ID' const timeout = 5 * 60 * 1000 let timerId export default { @@ -1323,9 +1325,18 @@ export default { axialCameraPositionSynchronizer = createCameraPositionSynchronizer( axialCameraSynchronizerId ) - ctVoiSynchronizer = createVOISynchronizer(ctVoiSynchronizerId) - ptVoiSynchronizer = createVOISynchronizer(ptVoiSynchronizerId); - + ctVoiSynchronizer = createVOISynchronizer(ctVoiSynchronizerId, { + syncInvertState: false, + syncColormap: false, + }); + ptVoiSynchronizer = createVOISynchronizer(ptVoiSynchronizerId, { + syncInvertState: false, + syncColormap: false, + }); + fusionVoiSynchronizer = createVOISynchronizer(fusionVoiSynchronizerId, { + syncInvertState: false, + syncColormap: false, + }); // Add viewports to camera synchronizers [ viewportIds.CT.AXIAL, @@ -1348,25 +1359,41 @@ export default { }) }); [ - viewportIds.FUSION.AXIAL - ].forEach((viewportId) => { - // In this example, the fusion viewports are only targets for CT VOI - // synchronization, not sources - ctVoiSynchronizer.addTarget({ - renderingEngineId, - viewportId - }) - }); - [ - viewportIds.PT.AXIAL, - viewportIds.FUSION.AXIAL, - viewportIds.PETMIP.CORONAL + // viewportIds.FUSION.AXIAL, + viewportIds.PETMIP.CORONAL, + viewportIds.PT.AXIAL ].forEach((viewportId) => { ptVoiSynchronizer.add({ renderingEngineId, viewportId }) - }) + }); + [ + viewportIds.FUSION.AXIAL + ].forEach((viewportId) => { + fusionVoiSynchronizer.add({ + renderingEngineId, + viewportId, + }) + ctVoiSynchronizer.addTarget({ + renderingEngineId, + viewportId + }) + ptVoiSynchronizer.addTarget({ + renderingEngineId, + viewportId, + }) + }); + // [ + // viewportIds.PT.AXIAL, + // viewportIds.FUSION.AXIAL, + // viewportIds.PETMIP.CORONAL + // ].forEach((viewportId) => { + // ptVoiSynchronizer.add({ + // renderingEngineId, + // viewportId + // }) + // }); }, async setUpDisplay() { @@ -1415,7 +1442,7 @@ export default { // Set the volumes to load this.ptVolume.load() this.ctVolume.load() - console.log(this.ctVolume.cornerstoneImageMetaData) + // console.log(this.ctVolume.cornerstoneImageMetaData) // const windowCenter = this.ctVolume.cornerstoneImageMetaData.windowCenter[0] // const windowWidth = this.ctVolume.cornerstoneImageMetaData.windowWidth[0] // setCtMappingRange(windowWidth, windowCenter) @@ -1654,38 +1681,55 @@ export default { : { lower: voiRange[0], upper: voiRange[1] } }, voiChange(v) { - const viewportId = viewportIds.FUSION.AXIAL - const volumeId = ptVolumeId - const voiRange = { lower: 0, upper: v } - const viewport = ( - renderingEngine.getViewport(viewportId) - ) - if (!viewport) return - const viewportsContainingVolumeUID = csUtils.getViewportsWithVolumeId( - volumeId, - viewport.renderingEngineId - ) + let viewportIds = ['FUSION_AXIAL', 'PT_AXIAL', 'PET_MIP_CORONAL'] + viewportIds.map(viewportId=>{ + const volumeId = ptVolumeId + const voiRange = { lower: 0, upper: v } + const viewport = ( + renderingEngine.getViewport(viewportId) + ) + if (!viewport) return + const viewportsContainingVolumeUID = csUtils.getViewportsWithVolumeId( + volumeId, + viewport.renderingEngineId + ) - viewport.setProperties({ voiRange }, volumeId) - viewportsContainingVolumeUID.forEach((vp) => { - vp.render() - this.$refs[vp.id].setWwWc() + viewport.setProperties({ voiRange }, volumeId) + viewportsContainingVolumeUID.forEach((vp) => { + vp.render() + this.$refs[vp.id].setWwWc() + }) }) + }, async setColorMap(rgbPresetName) { this.rgbPresetName = rgbPresetName - this.$refs['FUSION_AXIAL'].setPreset(this.rgbPresetName) - this.$refs['FUSION_AXIAL'].renderColorBar(this.rgbPresetName) - this.createColorBar(this.rgbPresetName, 'colorBarCanvas', 256, 15) - const renderingEngine = getRenderingEngine(renderingEngineId) + let viewports = ['FUSION_AXIAL', 'PT_AXIAL', 'PET_MIP_CORONAL'] + viewports.map(v=>{ + this.$refs[v].setPreset(this.rgbPresetName) + this.$refs[v].renderColorBar(this.rgbPresetName) + this.createColorBar(this.rgbPresetName, 'colorBarCanvas', 256, 15) + const renderingEngine = getRenderingEngine(renderingEngineId) - const viewport = ( - renderingEngine.getViewport(viewportIds.FUSION.AXIAL) - ) + const viewport = ( + renderingEngine.getViewport(v) + ) - viewport.setProperties({ colormap: { name: rgbPresetName } }, ptVolumeId) - // viewport.setProperties({ colormap: { name: rgbPresetName }}, ctVolumeId) - viewport.render() + viewport.setProperties({ colormap: { name: rgbPresetName } }, ptVolumeId) + viewport.render() + }) + // this.$refs['FUSION_AXIAL'].setPreset(this.rgbPresetName) + // this.$refs['FUSION_AXIAL'].renderColorBar(this.rgbPresetName) + // this.createColorBar(this.rgbPresetName, 'colorBarCanvas', 256, 15) + // const renderingEngine = getRenderingEngine(renderingEngineId) + + // const viewport = ( + // renderingEngine.getViewport(viewportIds.FUSION.AXIAL) + // ) + + // viewport.setProperties({ colormap: { name: rgbPresetName } }, ptVolumeId) + // // viewport.setProperties({ colormap: { name: rgbPresetName }}, ctVolumeId) + // viewport.render() // document.onselectstart = function() { return false }// 解决拖动会选中文字的问题 // document.ondragstart = function() { return false } }, @@ -1775,33 +1819,16 @@ export default { this.setToolMode('passive', this.activeTool) this.activeTool = '' } - const viewports = [ - { viewportId: 'CT_AXIAL', volumeId: ctVolumeId }, - { viewportId: 'PT_AXIAL', volumeId: ptVolumeId } - // { viewportId: 'FUSION_AXIAL', volumeId: ptVolumeId } - ] - viewports.map(v => { - const { viewportId, volumeId } = v - const renderingEngine = getRenderingEngine(renderingEngineId) - - // Get the volume viewport - const viewport = ( - renderingEngine.getViewport(viewportId) - ) - - // Get the volume actor from the viewport - const actorEntry = viewport.getActor(volumeId) - - const volumeActor = actorEntry.actor - const rgbTransferFunction = volumeActor - .getProperty() - .getRGBTransferFunction(0) - - // Todo: implement invert in setProperties - csUtils.invertRgbTransferFunction(rgbTransferFunction) - - viewport.render() - }) + let viewporId = this.activeIndex === 1 ? 'CT_AXIAL' : this.activeIndex === 2 ? 'PT_AXIAL' : this.activeIndex === 3 ? 'FUSION_AXIAL' : 'PET_MIP_CORONAL' + let volumeId = this.activeIndex === 1 ? ctVolumeId : ptVolumeId + const renderingEngine = getRenderingEngine(renderingEngineId) + const viewport = renderingEngine.getViewport(viewporId) + const { invert } = viewport.getProperties() + if ( this.isFusion ) { + viewport.setProperties({ invert: !invert }, volumeId ) + } + viewport.setProperties({ invert: !invert }) + viewport.render() }, showPanel(e) { e.currentTarget.firstChild.lastChild.style.display = 'block'