阅片页面视角信息更改
parent
1e6ec0df27
commit
76e328dcca
|
@ -295,6 +295,7 @@
|
|||
<ul style="width:100px;" v-if="readingTaskState < 2">
|
||||
<li v-for="i in customizeStandards" :key="i.toolName" style="text-align:left;">
|
||||
<a href="#" @click.prevent="setMoreToolActive(i.toolName)">
|
||||
<svg-icon :icon-class="i.icon" class="svg-icon" style="margin-right: 5px;"/>
|
||||
{{ $t(i.i18nKey) }}
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
HU: {{ mousePosition.value }}
|
||||
</div>
|
||||
<div v-else-if="(series.Modality === 'PT' && mousePosition.value)">
|
||||
SUVbw(g/ml): {{ digitPlaces === -1 ?mousePosition.value.toFixed(3) :mousePosition.value.toFixed(digitPlaces) }}
|
||||
{{mousePosition.modalityUnit}}: {{ digitPlaces === -1 ?mousePosition.value.toFixed(3) :mousePosition.value.toFixed(digitPlaces) }}
|
||||
</div>
|
||||
<div v-else-if="mousePosition.value">
|
||||
Density: {{ mousePosition.value }}
|
||||
|
@ -74,6 +74,9 @@
|
|||
<div v-show="imageInfo.size">
|
||||
W*H: {{ imageInfo.size }}
|
||||
</div>
|
||||
<div v-show="imageInfo.zoom">
|
||||
Zoom: {{ imageInfo.zoom }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="series" class="right-bottom-text">
|
||||
<div v-show="imageInfo.location">Location: {{ `${Number(imageInfo.location).toFixed(digitPlaces)} mm` }}</div>
|
||||
|
@ -111,9 +114,12 @@ import {
|
|||
} from '@cornerstonejs/core'
|
||||
import * as cornerstoneTools from '@cornerstonejs/tools'
|
||||
import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader'
|
||||
const {
|
||||
ToolGroupManager
|
||||
} = cornerstoneTools
|
||||
import {
|
||||
utilities as csToolsUtils
|
||||
} from '@cornerstonejs/tools'
|
||||
import { getPTImageIdInstanceMetadata } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/getPTImageIdInstanceMetadata'
|
||||
import ptScalingMetaDataProvider from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/ptScalingMetaDataProvider'
|
||||
import { calculateSUVScalingFactors } from '@cornerstonejs/calculate-suv'
|
||||
import { vec3 } from 'gl-matrix'
|
||||
export default {
|
||||
name: 'ImageViewport',
|
||||
|
@ -188,6 +194,7 @@ export default {
|
|||
this.element.addEventListener('CORNERSTONE_TOOLS_MOUSE_MOVE', this.cornerstoneToolsMouseMove)
|
||||
this.element.addEventListener('mouseleave', () => {
|
||||
this.mousePosition.index = []
|
||||
this.mousePosition.value = null
|
||||
})
|
||||
// console.log(cornerstoneTools)
|
||||
// element.addEventListener('CORNERSTONE_STACK_NEW_IMAGE', this.stackNewImage)
|
||||
|
@ -339,16 +346,31 @@ export default {
|
|||
viewport.render()
|
||||
}
|
||||
},
|
||||
async prefetchMetadataInformation(imageIdsToPrefetch) {
|
||||
async prefetchMetadataInformation(imageIdsToPrefetch, modality) {
|
||||
let taskPromises = []
|
||||
for (let i = 0; i < imageIdsToPrefetch.length; i++) {
|
||||
taskPromises.push(cornerstoneDICOMImageLoader.wadouri.loadImage(imageIdsToPrefetch[i]).promise)
|
||||
if (taskPromises.length >= 6 || i === imageIdsToPrefetch.length - 1) {
|
||||
await Promise.all(taskPromises)
|
||||
let res = await Promise.all(taskPromises)
|
||||
if (modality === 'PT') {
|
||||
this.cachePTMetadata(res)
|
||||
}
|
||||
taskPromises = []
|
||||
}
|
||||
}
|
||||
},
|
||||
cachePTMetadata(images) {
|
||||
images.map(i=>{
|
||||
const instanceMetadata = getPTImageIdInstanceMetadata(i.imageId)
|
||||
if (typeof instanceMetadata.CorrectedImage === 'string') {
|
||||
instanceMetadata.CorrectedImage = instanceMetadata.CorrectedImage.split('\\')
|
||||
}
|
||||
if (instanceMetadata) {
|
||||
const suvScalingFactors = calculateSUVScalingFactors([instanceMetadata])
|
||||
ptScalingMetaDataProvider.addInstance(i.imageId, suvScalingFactors[0])
|
||||
}
|
||||
})
|
||||
},
|
||||
async setSeriesInfo(obj, isLocate = false) {
|
||||
try {
|
||||
if (this.series && obj.Id === this.series.Id && obj.Description === this.series.Description && !isLocate) {
|
||||
|
@ -359,9 +381,12 @@ export default {
|
|||
this.series = { ...obj }
|
||||
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
||||
const viewport = renderingEngine.getViewport(this.viewportId)
|
||||
this.prefetchMetadataInformation(obj.ImageIds)
|
||||
const image = await cornerstoneDICOMImageLoader.wadouri.loadImage(obj.ImageIds[obj.SliceIndex]).promise
|
||||
if (obj.Modality === 'PT') {
|
||||
this.cachePTMetadata([image])
|
||||
}
|
||||
this.prefetchMetadataInformation(obj.ImageIds, obj.Modality)
|
||||
await viewport.setStack(this.series.Stack, obj.SliceIndex)
|
||||
// cornerstoneTools.utilities.stackContextPrefetch.enable(viewport.element)
|
||||
viewport.render()
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
|
@ -372,13 +397,48 @@ export default {
|
|||
const worldPoint = currentPoints.world
|
||||
const renderingEngine = getRenderingEngine(this.renderingEngineId)
|
||||
const viewport = renderingEngine.getViewport(this.viewportId)
|
||||
const imageData = viewport.getImageData()
|
||||
if (!imageData) return
|
||||
const index = imageData.imageData.worldToIndex(worldPoint)
|
||||
let referencedImageId = viewport.getCurrentImageId()
|
||||
const data = viewport.getImageData()
|
||||
if (!data) return
|
||||
const { dimensions, imageData, metadata, voxelManager } = data
|
||||
const index = imageData.worldToIndex(worldPoint)
|
||||
index[0] = Math.floor(index[0])
|
||||
index[1] = Math.floor(index[1])
|
||||
index[2] = Math.floor(index[2])
|
||||
this.mousePosition.index = index
|
||||
const modality = metadata.Modality
|
||||
let ijk = csUtils.transformWorldToIndex(imageData, worldPoint)
|
||||
ijk = vec3.round(ijk, ijk);
|
||||
if (csUtils.indexWithinDimensions(ijk, dimensions)) {
|
||||
this.isHandleOutsideImage = false
|
||||
let value = voxelManager.getAtIJKPoint(ijk)
|
||||
ijk[2] = viewport.getCurrentImageIdIndex()
|
||||
let modalityUnit
|
||||
if (modality === 'US') {
|
||||
const calibratedResults = csToolsUtils.getCalibratedProbeUnitsAndValue(image, [ijk])
|
||||
const hasEnhancedRegionValues = calibratedResults.values.every(
|
||||
(value) => value !== null
|
||||
)
|
||||
value = (hasEnhancedRegionValues ? calibratedResults.values : value)
|
||||
modalityUnit = hasEnhancedRegionValues
|
||||
? calibratedResults.units
|
||||
: 'raw';
|
||||
} else {
|
||||
const scalingModule = referencedImageId && metaData.get('scalingModule', referencedImageId)
|
||||
const isSuvScaled = typeof scalingModule?.suvbw === 'number'
|
||||
const pixelUnitsOptions = {
|
||||
isPreScaled: csToolsUtils.viewport.isViewportPreScaled(viewport, referencedImageId),
|
||||
isSuvScaled: isSuvScaled,
|
||||
}
|
||||
modalityUnit = csToolsUtils.getPixelValueUnits(
|
||||
modality,
|
||||
referencedImageId,
|
||||
pixelUnitsOptions
|
||||
);
|
||||
}
|
||||
this.mousePosition.value = value
|
||||
this.mousePosition.modalityUnit = modalityUnit
|
||||
}
|
||||
},
|
||||
toggleTask(evt, visitTaskNum, i) {
|
||||
this.$emit('activeViewport', this.viewportIndex)
|
||||
|
|
Loading…
Reference in New Issue