截图更改及长短径工具更改
parent
c9057e12cd
commit
7266d0a4f5
|
|
@ -915,7 +915,13 @@ export default {
|
||||||
fullScreenWidth: window.innerWidth - 570 + 'px',
|
fullScreenWidth: window.innerWidth - 570 + 'px',
|
||||||
fullScreenHeight: window.innerHeight - 130 + 'px',
|
fullScreenHeight: window.innerHeight - 130 + 'px',
|
||||||
|
|
||||||
ManualsClose: false
|
ManualsClose: false,
|
||||||
|
screenshotCache: {
|
||||||
|
key: '',
|
||||||
|
at: 0,
|
||||||
|
base64: ''
|
||||||
|
},
|
||||||
|
screenshotInFlight: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -1051,30 +1057,27 @@ export default {
|
||||||
console.log('getMeasureData')
|
console.log('getMeasureData')
|
||||||
})
|
})
|
||||||
DicomEvent.$on('getScreenshots', async (measuredData, callback) => {
|
DicomEvent.$on('getScreenshots', async (measuredData, callback) => {
|
||||||
if (this.currentDicomCanvasIndex > -1) {
|
if (this.currentDicomCanvasIndex <= -1 || typeof callback !== 'function') return
|
||||||
|
const shouldRelocate = this.shouldRelocateBeforeScreenshot(measuredData)
|
||||||
|
if (shouldRelocate) {
|
||||||
await this.imageLocation(measuredData)
|
await this.imageLocation(measuredData)
|
||||||
if (!measuredData.isMarked) {
|
|
||||||
callback()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
setTimeout(async () => {
|
|
||||||
// var base64Str = this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`][0].getScreenshots()
|
|
||||||
const divForDownloadViewport = document.querySelector(
|
|
||||||
`div[data-canvas-uid="dicomCanvas${this.currentDicomCanvasIndex}"]`
|
|
||||||
)
|
|
||||||
var canvas = await html2canvas(divForDownloadViewport)
|
|
||||||
var base64Str = canvas.toDataURL('image/png', 1)
|
|
||||||
console.log('getScreenshots')
|
|
||||||
callback(base64Str)
|
|
||||||
}, 50)
|
|
||||||
}
|
}
|
||||||
|
if (!measuredData || !measuredData.isMarked) {
|
||||||
|
callback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const cacheKey = this.getScreenshotCacheKey(measuredData)
|
||||||
|
const base64Str = await this.getOrCaptureScreenshot(cacheKey)
|
||||||
|
callback(base64Str)
|
||||||
})
|
})
|
||||||
DicomEvent.$on('imageLocation', async (measuredData) => {
|
DicomEvent.$on('imageLocation', async (measuredData) => {
|
||||||
return new Promise(async resolve => {
|
return new Promise(async resolve => {
|
||||||
if (!measuredData) return
|
if (!measuredData) return
|
||||||
await this.imageLocation(measuredData)
|
// await this.imageLocation(measuredData)
|
||||||
|
const shouldRelocate = this.shouldRelocateBeforeScreenshot(measuredData)
|
||||||
console.log('imageLocation')
|
if (shouldRelocate) {
|
||||||
|
await this.imageLocation(measuredData)
|
||||||
|
}
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -1710,6 +1713,85 @@ export default {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
shouldRelocateBeforeScreenshot(measuredData) {
|
||||||
|
if (!measuredData) return false
|
||||||
|
const currentCanvas = this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`] && this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`][0]
|
||||||
|
if (!currentCanvas || !currentCanvas.stack) return true
|
||||||
|
const currentStack = currentCanvas.stack
|
||||||
|
if (currentStack.visitTaskId !== measuredData.visitTaskId) return true
|
||||||
|
|
||||||
|
// 当前序列与病灶目标序列一致时,避免重复 imageLocation 引发的重载等待
|
||||||
|
const targetSeries = this.getSeriesInfoByMark(measuredData.visitTaskId, measuredData)
|
||||||
|
if (!targetSeries) return false
|
||||||
|
if (currentStack.seriesId !== targetSeries.seriesId) return true
|
||||||
|
if (typeof targetSeries.imageIdIndex === 'number' &&
|
||||||
|
targetSeries.imageIdIndex !== currentStack.currentImageIdIndex) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
getScreenshotCacheKey(measuredData) {
|
||||||
|
const currentCanvas = this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`] && this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`][0]
|
||||||
|
const currentStack = currentCanvas && currentCanvas.stack ? currentCanvas.stack : {}
|
||||||
|
return [
|
||||||
|
this.currentDicomCanvasIndex,
|
||||||
|
currentStack.visitTaskId || '',
|
||||||
|
currentStack.seriesId || '',
|
||||||
|
typeof currentStack.currentImageIdIndex === 'number' ? currentStack.currentImageIdIndex : '',
|
||||||
|
measuredData.visitTaskId || '',
|
||||||
|
measuredData.questionId || '',
|
||||||
|
measuredData.rowIndex || '',
|
||||||
|
measuredData.lesionName || '',
|
||||||
|
measuredData.isMarked ? 1 : 0
|
||||||
|
].join('|')
|
||||||
|
},
|
||||||
|
async getOrCaptureScreenshot(cacheKey) {
|
||||||
|
const now = Date.now()
|
||||||
|
if (this.screenshotCache.key === cacheKey &&
|
||||||
|
this.screenshotCache.base64 &&
|
||||||
|
now - this.screenshotCache.at < 1500) {
|
||||||
|
return this.screenshotCache.base64
|
||||||
|
}
|
||||||
|
if (this.screenshotInFlight && this.screenshotInFlight.key === cacheKey) {
|
||||||
|
return this.screenshotInFlight.promise
|
||||||
|
}
|
||||||
|
const promise = this.captureActiveViewportScreenshot()
|
||||||
|
.then((base64) => {
|
||||||
|
this.screenshotCache = {
|
||||||
|
key: cacheKey,
|
||||||
|
at: Date.now(),
|
||||||
|
base64: base64 || ''
|
||||||
|
}
|
||||||
|
return base64
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
if (this.screenshotInFlight && this.screenshotInFlight.key === cacheKey) {
|
||||||
|
this.screenshotInFlight = null
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.screenshotInFlight = { key: cacheKey, promise }
|
||||||
|
return promise
|
||||||
|
},
|
||||||
|
async captureActiveViewportScreenshot() {
|
||||||
|
// const currentCanvas = this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`] && this.$refs[`dicomCanvas${this.currentDicomCanvasIndex}`][0]
|
||||||
|
await this.$nextTick()
|
||||||
|
const divForDownloadViewport = document.querySelector(
|
||||||
|
`div[data-canvas-uid="dicomCanvas${this.currentDicomCanvasIndex}"]`
|
||||||
|
)
|
||||||
|
if (divForDownloadViewport) {
|
||||||
|
try {
|
||||||
|
const canvas = await html2canvas(divForDownloadViewport, {
|
||||||
|
logging: false,
|
||||||
|
useCORS: true,
|
||||||
|
scale: 1
|
||||||
|
})
|
||||||
|
return canvas.toDataURL('image/png')
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
},
|
||||||
setToolToTarget(obj) {
|
setToolToTarget(obj) {
|
||||||
if (obj.readingTaskState < 2 && obj.markTool && !obj.isMarked) {
|
if (obj.readingTaskState < 2 && obj.markTool && !obj.isMarked) {
|
||||||
if (this.activeTool) {
|
if (this.activeTool) {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import createNewMeasurement from './createNewMeasurement'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default class BidirectionalTool extends cornerstoneTools.BidirectionalTool {
|
export default class BidirectionalTool extends cornerstoneTools.BidirectionalTool {
|
||||||
constructor(props) {
|
constructor(props = {}) {
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
name: 'Bidirectional',
|
name: 'Bidirectional',
|
||||||
configuration: {
|
configuration: {
|
||||||
|
|
@ -25,7 +25,8 @@ export default class BidirectionalTool extends cornerstoneTools.BidirectionalToo
|
||||||
|
|
||||||
super(props, defaultProps)
|
super(props, defaultProps)
|
||||||
this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 50)
|
this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 50)
|
||||||
this.digits = isNaN(parseInt(props.configuration.digits)) ? 2 : props.configuration.digits
|
const digits = props?.configuration?.digits
|
||||||
|
this.digits = isNaN(parseInt(digits)) ? 2 : digits
|
||||||
this.createNewMeasurement = createNewMeasurement.bind(this)
|
this.createNewMeasurement = createNewMeasurement.bind(this)
|
||||||
this.renderToolData = renderToolData.bind(this)
|
this.renderToolData = renderToolData.bind(this)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue