- 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) }}
Location: {{ `${Number(imageInfo.location).toFixed(digitPlaces)} mm` }}
@@ -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)