suv融合
continuous-integration/drone/push Build is passing Details

uat
wangxiaoshuang 2025-05-09 14:20:24 +08:00
parent 8eb0b96c8e
commit 00cfb92087
4 changed files with 108 additions and 3372 deletions

View File

@ -205,7 +205,7 @@ export default {
} }
}) })
this.element.oncontextmenu = (e) => e.preventDefault() this.element.oncontextmenu = (e) => e.preventDefault()
resizeObserver.observe(this.element) // resizeObserver.observe(this.element)
this.element.addEventListener("CORNERSTONE_VOLUME_NEW_IMAGE", this.stackNewImage) this.element.addEventListener("CORNERSTONE_VOLUME_NEW_IMAGE", this.stackNewImage)
this.element.addEventListener('CORNERSTONE_VOI_MODIFIED', this.voiModified) this.element.addEventListener('CORNERSTONE_VOI_MODIFIED', this.voiModified)
@ -245,7 +245,10 @@ export default {
this.imageInfo.location = imagePlaneModule.sliceLocation this.imageInfo.location = imagePlaneModule.sliceLocation
this.getOrientationMarker() this.getOrientationMarker()
// this.$emit('renderAnnotations', this.series) // this.$emit('renderAnnotations', this.series)
var properties = viewport.getProperties() let properties = viewport.getProperties()
if (this.isFusion) {
properties = viewport.getProperties(this.ptVolumeId)
}
if (properties && properties.voiRange) { if (properties && properties.voiRange) {
var { lower, upper } = properties.voiRange var { lower, upper } = properties.voiRange
@ -264,7 +267,10 @@ export default {
voiModified(e) { voiModified(e) {
const renderingEngine = getRenderingEngine(this.renderingEngineId) const renderingEngine = getRenderingEngine(this.renderingEngineId)
const viewport = renderingEngine.getViewport(this.viewportId) const viewport = renderingEngine.getViewport(this.viewportId)
const properties = viewport.getProperties() let properties = viewport.getProperties()
if (this.isFusion) {
properties = viewport.getProperties(this.volumeId)
}
if (properties && properties.voiRange) { if (properties && properties.voiRange) {
var { lower, upper } = properties.voiRange var { lower, upper } = properties.voiRange
const { windowWidth, windowCenter } = csUtils.windowLevel.toWindowLevel( const { windowWidth, windowCenter } = csUtils.windowLevel.toWindowLevel(
@ -387,29 +393,18 @@ export default {
const voiRange = { lower: 0, upper: v } const voiRange = { lower: 0, upper: v }
const viewport = renderingEngine.getViewport(this.viewportId) const viewport = renderingEngine.getViewport(this.viewportId)
if (!viewport) return if (!viewport) return
let volumeId = this.isFusion ? this.ptVolumeId : this.volumeId
const viewportsContainingVolumeUID = csUtils.getViewportsWithVolumeId( const viewportsContainingVolumeUID = csUtils.getViewportsWithVolumeId(
this.volumeId, volumeId,
viewport.renderingEngineId viewport.renderingEngineId
) )
viewport.setProperties({ voiRange }, this.volumeId) viewport.setProperties({ voiRange }, volumeId)
viewportsContainingVolumeUID.forEach((vp) => { viewportsContainingVolumeUID.forEach((vp) => {
vp.render() vp.render()
// this.$refs[vp.id].voiModified() // this.$refs[vp.id].voiModified()
this.voiModified() this.voiModified()
}) })
if (this.ptVolumeId) {
const viewportsContainingVolumeUIDPT = csUtils.getViewportsWithVolumeId(
this.ptVolumeId,
viewport.renderingEngineId
)
viewport.setProperties({ voiRange }, this.ptVolumeId)
viewportsContainingVolumeUIDPT.forEach((vp) => {
vp.render()
this.voiModified()
})
}
}, },
renderColorBar(presetName) { renderColorBar(presetName) {
var colorMap = null var colorMap = null

View File

@ -582,9 +582,10 @@ const {
EraserTool, EraserTool,
MIPJumpToClickTool, MIPJumpToClickTool,
VolumeRotateTool, VolumeRotateTool,
synchronizers
// cursors // cursors
} = cornerstoneTools } = cornerstoneTools
const { createCameraPositionSynchronizer, createVOISynchronizer } = synchronizers;
const newStyles = { const newStyles = {
global: { global: {
color: 'rgb(255, 0, 0)', color: 'rgb(255, 0, 0)',
@ -702,6 +703,7 @@ export default {
isFusion: false, isFusion: false,
studyList: [], studyList: [],
volumeData: {}, volumeData: {},
fusionSerieId: {},
loadingText: null loadingText: null
} }
}, },
@ -1221,6 +1223,9 @@ export default {
eventTarget.addEventListener('cornerstoneimageloadprogress', this.imageLoadProgress) eventTarget.addEventListener('cornerstoneimageloadprogress', this.imageLoadProgress)
console.log(Events, toolsEvents) console.log(Events, toolsEvents)
if ( this.readingTool === 2 ) {
this.setUpSynchronizers()
}
}, },
// //
imageLoadProgress(e) { imageLoadProgress(e) {
@ -2625,6 +2630,67 @@ export default {
}, delay) }, delay)
} }
}, },
//
setUpSynchronizers() {
let axialCameraPositionSynchronizer = createCameraPositionSynchronizer(
'AXIAL_CAMERA_SYNCHRONIZER_ID'
);
let ctVoiSynchronizer = createVOISynchronizer('CT_VOI_SYNCHRONIZER_ID', {
syncInvertState: false,
syncColormap: false,
});
let ptVoiSynchronizer = createVOISynchronizer('PT_VOI_SYNCHRONIZER_ID', {
syncInvertState: false,
syncColormap: false,
});
let fusionVoiSynchronizer = createVOISynchronizer('FUSION_VOI_SYNCHRONIZER_ID', {
syncInvertState: false,
syncColormap: false,
});
[
`viewport-fusion-0`,
`viewport-fusion-1`,
`viewport-fusion-2`,
].forEach((viewportId) => {
axialCameraPositionSynchronizer.add({
renderingEngineId: this.renderingEngineId,
viewportId,
});
});
[
`viewport-fusion-0`,
].forEach((viewportId) => {
ctVoiSynchronizer.add({
renderingEngineId: this.renderingEngineId,
viewportId,
});
});
[
`viewport-fusion-3`,
`viewport-fusion-1`,
].forEach((viewportId) => {
ptVoiSynchronizer.add({
renderingEngineId: this.renderingEngineId,
viewportId,
});
});
[
`viewport-fusion-2`,
].forEach((viewportId) => {
fusionVoiSynchronizer.add({
renderingEngineId,
viewportId,
});
ctVoiSynchronizer.addTarget({
renderingEngineId,
viewportId,
});
ptVoiSynchronizer.addTarget({
renderingEngineId,
viewportId,
});
});
},
setColorMap(rgbPresetName) { setColorMap(rgbPresetName) {
let fusionViewportIds = [`viewport-fusion-1`, `viewport-fusion-2`, `viewport-fusion-3`] let fusionViewportIds = [`viewport-fusion-1`, `viewport-fusion-2`, `viewport-fusion-3`]
fusionViewportIds.forEach(id => { fusionViewportIds.forEach(id => {
@ -2648,6 +2714,21 @@ export default {
let { ct, pt } = data let { ct, pt } = data
this.loading = true this.loading = true
this.loadingText = this.$t('trials:lugano:message:loadVolumes') this.loadingText = this.$t('trials:lugano:message:loadVolumes')
if ( this.verifyFusionData(ct, pt) ) {
this.loading = false
this.loadingText = null
this.$refs[`viewport-0`][0].setSeriesInfo(ct)
this.$refs[`viewport-1`][0].setSeriesInfo(pt)
this.$refs[`viewport-2`][0].setSeriesInfo(pt)
this.$refs[`viewport-3`][0].setSeriesInfo(pt)
return true
}
if (!this.fusionSerieId.ct || this.fusionSerieId.ct !== ct.SeriesInstanceUid ) {
this.fusionSerieId.ct = ct.SeriesInstanceUid
}
if (!this.fusionSerieId.pt || this.fusionSerieId.pt !== pt.SeriesInstanceUid ) {
this.fusionSerieId.pt = pt.SeriesInstanceUid
}
await this.getVolume(ct) await this.getVolume(ct)
await this.getVolume(pt) await this.getVolume(pt)
await this.getVolume(pt, true) await this.getVolume(pt, true)
@ -2655,20 +2736,20 @@ export default {
this.loadingText = null this.loadingText = null
let ctData = { let ctData = {
data: ct, data: ct,
volumeId: this.volumeData[ct.Id].volumeId, volumeId: this.volumeData[ct.SeriesInstanceUid].volumeId,
} }
let ptData = { let ptData = {
data: pt, data: pt,
volumeId: this.volumeData[pt.Id].volumeId, volumeId: this.volumeData[pt.SeriesInstanceUid].volumeId,
volume: this.volumeData[pt.Id].volume, volume: this.volumeData[pt.SeriesInstanceUid].volume,
} }
let fusionData = { let fusionData = {
ct, ct,
data: pt, data: pt,
volumeId: this.volumeData[pt.Id].volumeId, volumeId: this.volumeData[pt.SeriesInstanceUid].volumeId,
ctVolumeId: this.volumeData[ct.Id].volumeId, ctVolumeId: this.volumeData[ct.SeriesInstanceUid].volumeId,
ptVolumeId: this.volumeData[pt.Id].volumeId, ptVolumeId: this.volumeData[pt.SeriesInstanceUid].volumeId,
fusionVolumeId: this.volumeData[`fusion_${pt.Id}`].volumeId, fusionVolumeId: this.volumeData[`fusion_${pt.SeriesInstanceUid}`].volumeId,
} }
this.$refs[`viewport-0`][0].setSeriesInfo(ct) this.$refs[`viewport-0`][0].setSeriesInfo(ct)
this.$refs[`viewport-1`][0].setSeriesInfo(pt) this.$refs[`viewport-1`][0].setSeriesInfo(pt)
@ -2688,9 +2769,15 @@ export default {
this.loadingText = null this.loadingText = null
} }
}, },
verifyFusionData(ct, pt) {
if (this.fusionSerieId.ct === ct.SeriesInstanceUid && this.fusionSerieId.pt === pt.SeriesInstanceUid && cache.getVolume(this.volumeData[ct.SeriesInstanceUid].volumeId) && cache.getVolume(this.volumeData[pt.SeriesInstanceUid].volumeId) && cache.getVolume(this.volumeData[`fusion_${pt.SeriesInstanceUid}`].volumeId) ) {
return true
}
return false
},
async getVolume(serie, isFusion = false ) { async getVolume(serie, isFusion = false ) {
let volumeId = null, volume = null let volumeId = null, volume = null
let key = isFusion ? `fusion_${serie.Id}` : serie.Id let key = isFusion ? `fusion_${serie.SeriesInstanceUid}` : serie.SeriesInstanceUid
if(!this.volumeData[key] || !cache.getVolume(this.volumeData[key].volumeId)) { if(!this.volumeData[key] || !cache.getVolume(this.volumeData[key].volumeId)) {
await this.$refs[`viewport-fusion-0`][0].createImageIdsAndCacheMetaData(serie) await this.$refs[`viewport-fusion-0`][0].createImageIdsAndCacheMetaData(serie)
volumeId = `${isFusion ? 'fusion' : serie.Modality}Volume` + ':' + csUtils.uuidv4() volumeId = `${isFusion ? 'fusion' : serie.Modality}Volume` + ':' + csUtils.uuidv4()

View File

@ -25,7 +25,6 @@
</template> </template>
<script> <script>
import ReadPage from './ReadPage' import ReadPage from './ReadPage'
import PetCtReadPage from './PetCtReadPage'
import ReportPage from './ReportPage' import ReportPage from './ReportPage'
import CustomizeReportPage from './customize/ReportPage' import CustomizeReportPage from './customize/ReportPage'
export default { export default {
@ -33,7 +32,6 @@ export default {
components: { components: {
ReadPage, ReadPage,
ReportPage, ReportPage,
PetCtReadPage,
CustomizeReportPage CustomizeReportPage
}, },
props: { props: {