lugano更改

uat
caiyiling 2025-05-14 15:48:08 +08:00
parent 9ce6ff25b9
commit 0280dfb959
1 changed files with 99 additions and 72 deletions

View File

@ -247,11 +247,11 @@
</div> </div>
<el-dialog v-if="customWwc.visible" :visible.sync="customWwc.visible" :close-on-click-modal="false" <el-dialog v-if="customWwc.visible" :visible.sync="customWwc.visible" :close-on-click-modal="false"
:title="customWwc.title" width="400px" custom-class="base-dialog-wrapper"> :title="customWwc.title" width="400px" custom-class="base-dialog-wrapper">
<CustomWwwcForm :ww="activeCanvasWW" :wc="activeCanvasWC" @close="customWwc.visible = false" @setWwwc="setWwwc" /> <custom-wwwc-form :ww="activeCanvasWW" :wc="activeCanvasWC" @close="customWwc.visible = false" @setWwwc="setWwwc" />
</el-dialog> </el-dialog>
<el-dialog :visible.sync="fusion.visible" :close-on-click-modal="false" :title="$t('trials:lugano:button:record')" <el-dialog :visible.sync="fusion.visible" :close-on-click-modal="false" :title="$t('trials:lugano:button:record')"
width="850px"> width="850px">
<FusionForm @close="fusion.visible = false" /> <fusion-form @close="fusion.visible = false" />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@ -352,6 +352,7 @@ const mipToolGroupUID = 'MIP_TOOLGROUP_ID'
var axialCameraPositionSynchronizer var axialCameraPositionSynchronizer
var ctVoiSynchronizer var ctVoiSynchronizer
var ptVoiSynchronizer var ptVoiSynchronizer
var fusionVoiSynchronizer
const viewportIds = { const viewportIds = {
CT: { AXIAL: 'CT_AXIAL', SAGITTAL: 'CT_SAGITTAL', CORONAL: 'CT_CORONAL' }, CT: { AXIAL: 'CT_AXIAL', SAGITTAL: 'CT_SAGITTAL', CORONAL: 'CT_CORONAL' },
PT: { AXIAL: 'PT_AXIAL', SAGITTAL: 'PT_SAGITTAL', CORONAL: 'PT_CORONAL' }, PT: { AXIAL: 'PT_AXIAL', SAGITTAL: 'PT_SAGITTAL', CORONAL: 'PT_CORONAL' },
@ -376,6 +377,7 @@ var mipToolGroup
const axialCameraSynchronizerId = 'AXIAL_CAMERA_SYNCHRONIZER_ID' const axialCameraSynchronizerId = 'AXIAL_CAMERA_SYNCHRONIZER_ID'
const ctVoiSynchronizerId = 'CT_VOI_SYNCHRONIZER_ID' const ctVoiSynchronizerId = 'CT_VOI_SYNCHRONIZER_ID'
const ptVoiSynchronizerId = 'PT_VOI_SYNCHRONIZER_ID' const ptVoiSynchronizerId = 'PT_VOI_SYNCHRONIZER_ID'
const fusionVoiSynchronizerId = 'FUSION_VOI_SYNCHRONIZER_ID'
const timeout = 5 * 60 * 1000 const timeout = 5 * 60 * 1000
let timerId let timerId
export default { export default {
@ -1323,9 +1325,18 @@ export default {
axialCameraPositionSynchronizer = createCameraPositionSynchronizer( axialCameraPositionSynchronizer = createCameraPositionSynchronizer(
axialCameraSynchronizerId axialCameraSynchronizerId
) )
ctVoiSynchronizer = createVOISynchronizer(ctVoiSynchronizerId) ctVoiSynchronizer = createVOISynchronizer(ctVoiSynchronizerId, {
ptVoiSynchronizer = createVOISynchronizer(ptVoiSynchronizerId); syncInvertState: false,
syncColormap: false,
});
ptVoiSynchronizer = createVOISynchronizer(ptVoiSynchronizerId, {
syncInvertState: false,
syncColormap: false,
});
fusionVoiSynchronizer = createVOISynchronizer(fusionVoiSynchronizerId, {
syncInvertState: false,
syncColormap: false,
});
// Add viewports to camera synchronizers // Add viewports to camera synchronizers
[ [
viewportIds.CT.AXIAL, viewportIds.CT.AXIAL,
@ -1348,25 +1359,41 @@ export default {
}) })
}); });
[ [
viewportIds.FUSION.AXIAL // viewportIds.FUSION.AXIAL,
].forEach((viewportId) => { viewportIds.PETMIP.CORONAL,
// In this example, the fusion viewports are only targets for CT VOI viewportIds.PT.AXIAL
// synchronization, not sources
ctVoiSynchronizer.addTarget({
renderingEngineId,
viewportId
})
});
[
viewportIds.PT.AXIAL,
viewportIds.FUSION.AXIAL,
viewportIds.PETMIP.CORONAL
].forEach((viewportId) => { ].forEach((viewportId) => {
ptVoiSynchronizer.add({ ptVoiSynchronizer.add({
renderingEngineId, renderingEngineId,
viewportId 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() { async setUpDisplay() {
@ -1415,7 +1442,7 @@ export default {
// Set the volumes to load // Set the volumes to load
this.ptVolume.load() this.ptVolume.load()
this.ctVolume.load() this.ctVolume.load()
console.log(this.ctVolume.cornerstoneImageMetaData) // console.log(this.ctVolume.cornerstoneImageMetaData)
// const windowCenter = this.ctVolume.cornerstoneImageMetaData.windowCenter[0] // const windowCenter = this.ctVolume.cornerstoneImageMetaData.windowCenter[0]
// const windowWidth = this.ctVolume.cornerstoneImageMetaData.windowWidth[0] // const windowWidth = this.ctVolume.cornerstoneImageMetaData.windowWidth[0]
// setCtMappingRange(windowWidth, windowCenter) // setCtMappingRange(windowWidth, windowCenter)
@ -1654,38 +1681,55 @@ export default {
: { lower: voiRange[0], upper: voiRange[1] } : { lower: voiRange[0], upper: voiRange[1] }
}, },
voiChange(v) { voiChange(v) {
const viewportId = viewportIds.FUSION.AXIAL let viewportIds = ['FUSION_AXIAL', 'PT_AXIAL', 'PET_MIP_CORONAL']
const volumeId = ptVolumeId viewportIds.map(viewportId=>{
const voiRange = { lower: 0, upper: v } const volumeId = ptVolumeId
const viewport = ( const voiRange = { lower: 0, upper: v }
renderingEngine.getViewport(viewportId) const viewport = (
) renderingEngine.getViewport(viewportId)
if (!viewport) return )
const viewportsContainingVolumeUID = csUtils.getViewportsWithVolumeId( if (!viewport) return
volumeId, const viewportsContainingVolumeUID = csUtils.getViewportsWithVolumeId(
viewport.renderingEngineId volumeId,
) viewport.renderingEngineId
)
viewport.setProperties({ voiRange }, volumeId) viewport.setProperties({ voiRange }, volumeId)
viewportsContainingVolumeUID.forEach((vp) => { viewportsContainingVolumeUID.forEach((vp) => {
vp.render() vp.render()
this.$refs[vp.id].setWwWc() this.$refs[vp.id].setWwWc()
})
}) })
}, },
async setColorMap(rgbPresetName) { async setColorMap(rgbPresetName) {
this.rgbPresetName = rgbPresetName this.rgbPresetName = rgbPresetName
this.$refs['FUSION_AXIAL'].setPreset(this.rgbPresetName) let viewports = ['FUSION_AXIAL', 'PT_AXIAL', 'PET_MIP_CORONAL']
this.$refs['FUSION_AXIAL'].renderColorBar(this.rgbPresetName) viewports.map(v=>{
this.createColorBar(this.rgbPresetName, 'colorBarCanvas', 256, 15) this.$refs[v].setPreset(this.rgbPresetName)
const renderingEngine = getRenderingEngine(renderingEngineId) this.$refs[v].renderColorBar(this.rgbPresetName)
this.createColorBar(this.rgbPresetName, 'colorBarCanvas', 256, 15)
const renderingEngine = getRenderingEngine(renderingEngineId)
const viewport = ( const viewport = (
renderingEngine.getViewport(viewportIds.FUSION.AXIAL) renderingEngine.getViewport(v)
) )
viewport.setProperties({ colormap: { name: rgbPresetName } }, ptVolumeId) viewport.setProperties({ colormap: { name: rgbPresetName } }, ptVolumeId)
// viewport.setProperties({ colormap: { name: rgbPresetName }}, ctVolumeId) viewport.render()
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.onselectstart = function() { return false }//
// document.ondragstart = function() { return false } // document.ondragstart = function() { return false }
}, },
@ -1775,33 +1819,16 @@ export default {
this.setToolMode('passive', this.activeTool) this.setToolMode('passive', this.activeTool)
this.activeTool = '' this.activeTool = ''
} }
const viewports = [ let viewporId = this.activeIndex === 1 ? 'CT_AXIAL' : this.activeIndex === 2 ? 'PT_AXIAL' : this.activeIndex === 3 ? 'FUSION_AXIAL' : 'PET_MIP_CORONAL'
{ viewportId: 'CT_AXIAL', volumeId: ctVolumeId }, let volumeId = this.activeIndex === 1 ? ctVolumeId : ptVolumeId
{ viewportId: 'PT_AXIAL', volumeId: ptVolumeId } const renderingEngine = getRenderingEngine(renderingEngineId)
// { viewportId: 'FUSION_AXIAL', volumeId: ptVolumeId } const viewport = renderingEngine.getViewport(viewporId)
] const { invert } = viewport.getProperties()
viewports.map(v => { if ( this.isFusion ) {
const { viewportId, volumeId } = v viewport.setProperties({ invert: !invert }, volumeId )
const renderingEngine = getRenderingEngine(renderingEngineId) }
viewport.setProperties({ invert: !invert })
// Get the volume viewport viewport.render()
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()
})
}, },
showPanel(e) { showPanel(e) {
e.currentTarget.firstChild.lastChild.style.display = 'block' e.currentTarget.firstChild.lastChild.style.display = 'block'