分割部分问题解决
continuous-integration/drone/push Build is running Details

main
wangxiaoshuang 2026-04-09 17:19:12 +08:00
parent 641c2e6ade
commit a68c27fd43
3 changed files with 52 additions and 13 deletions

View File

@ -315,8 +315,8 @@
:rendering-engine-id="renderingEngineId" :viewport-id="`viewport-${index}`" :viewport-index="index" :rendering-engine-id="renderingEngineId" :viewport-id="`viewport-${index}`" :viewport-index="index"
:histogramVisible="histogramVisible" @activeViewport="activeViewport" :histogramVisible="histogramVisible" @activeViewport="activeViewport"
@toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD" @toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD"
@renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" v-if="readingTool === 3" @renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" @resetViewport="resetViewport"
v-resize="(e) => handleSizeChange(e, `viewport-${index}`)" /> v-if="readingTool === 3" v-resize="(e) => handleSizeChange(e, `viewport-${index}`)" />
<Viewport :ref="`viewport-${index}`" :data-viewport-uid="`viewport-${index}`" <Viewport :ref="`viewport-${index}`" :data-viewport-uid="`viewport-${index}`"
:rendering-engine-id="renderingEngineId" :viewport-id="`viewport-${index}`" :viewport-index="index" :rendering-engine-id="renderingEngineId" :viewport-id="`viewport-${index}`" :viewport-index="index"
@activeViewport="activeViewport" @toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD" @activeViewport="activeViewport" @toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD"
@ -2619,6 +2619,9 @@ export default {
console.log(lower, upper) console.log(lower, upper)
viewport.setProperties({ voiRange: { upper: upper, lower: lower } }) viewport.setProperties({ voiRange: { upper: upper, lower: lower } })
} }
if (this.readingTool === 3 && this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series.Modality === 'PT') {
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
}
viewport.render() viewport.render()
renderingEngine.render() renderingEngine.render()
if (this.readingTool === 3) { if (this.readingTool === 3) {
@ -2754,10 +2757,11 @@ export default {
const renderingEngine = getRenderingEngine(renderingEngineId) const renderingEngine = getRenderingEngine(renderingEngineId)
const viewport = renderingEngine.getViewport(`${this.viewportKey}-${this.activeViewportIndex}`) const viewport = renderingEngine.getViewport(`${this.viewportKey}-${this.activeViewportIndex}`)
const { invert } = viewport.getProperties() const { invert } = viewport.getProperties()
if (this.isFusion) { if (this.isFusion || this.readingTool === 3) {
viewport.setProperties({ invert: !invert }, this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId) viewport.setProperties({ invert: !invert }, this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId)
} else {
viewport.setProperties({ invert: !invert })
} }
viewport.setProperties({ invert: !invert })
viewport.render() viewport.render()
}, },
// //

View File

@ -2,21 +2,24 @@
<el-form ref="segmentForm" :model="form" label-width="120px" label-position="left" :rules="rules"> <el-form ref="segmentForm" :model="form" label-width="120px" label-position="left" :rules="rules">
<!-- 检查名称 --> <!-- 检查名称 -->
<el-form-item :label="$t('segment:form:label:studyName')" prop="taskBlindName"> <el-form-item :label="$t('segment:form:label:studyName')" prop="taskBlindName">
<el-select v-model="form.studyId" clearable @change="(e) => handleChange(e, 'study')"> <el-select v-model="form.studyId" clearable @change="(e) => handleChange(e, 'study')"
@clear="(e) => handleClear(e, 'study')">
<el-option v-for="item in studyList" :key="item.StudyId" :label="item.StudyCode" <el-option v-for="item in studyList" :key="item.StudyId" :label="item.StudyCode"
:value="item.StudyId" /> :value="item.StudyId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 序列名称 --> <!-- 序列名称 -->
<el-form-item :label="$t('segment:form:label:seriesName')" prop="taskBlindName"> <el-form-item :label="$t('segment:form:label:seriesName')" prop="taskBlindName">
<el-select v-model="form.seriesId" clearable @change="(e) => handleChange(e, 'series')"> <el-select v-model="form.seriesId" clearable @change="(e) => handleChange(e, 'series')"
@clear="(e) => handleClear(e, 'series')">
<el-option v-for="item in seriesList" :key="item.Id" <el-option v-for="item in seriesList" :key="item.Id"
:label="`#${item.SeriesNumber}/${item.Modality}/${item.Description}`" :value="item.Id" /> :label="`#${item.SeriesNumber}/${item.Modality}/${item.Description}`" :value="item.Id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 分割组名称 --> <!-- 分割组名称 -->
<el-form-item :label="$t('segment:form:label:segmentGroupName')" prop="segmentGroupId"> <el-form-item :label="$t('segment:form:label:segmentGroupName')" prop="segmentGroupId">
<el-select v-model="form.segmentGroupId" clearable @change="(e) => handleChange(e, 'segmentGroup')"> <el-select v-model="form.segmentGroupId" clearable @change="(e) => handleChange(e, 'segmentGroup')"
@clear="(e) => handleClear(e, 'segmentGroup')">
<el-option v-for="item in segmentGroupList" :key="item.Id" :label="item.SegmentationName" <el-option v-for="item in segmentGroupList" :key="item.Id" :label="item.SegmentationName"
:value="item.Id" /> :value="item.Id" />
</el-select> </el-select>
@ -106,10 +109,14 @@ export default {
}) })
this.studyList = studyList this.studyList = studyList
if (this.visitInfo.operateStateEnum === 21) { if (this.visitInfo.operateStateEnum === 21) {
this.form.studyId = this.series.StudyId let find = studyList.some(item => item.StudyId === this.series.StudyId)
this.handleChange(null, 'study') if (find) {
this.form.seriesId = this.series.Id this.form.studyId = this.series.StudyId
this.handleChange(null, 'series') this.handleChange(null, 'study')
this.form.seriesId = this.series.Id
this.handleChange(null, 'series')
}
} }
if (this.visitInfo.operateStateEnum === 22) { if (this.visitInfo.operateStateEnum === 22) {
let o = {} let o = {}
@ -132,6 +139,7 @@ export default {
}, },
async handleChange(e, key) { async handleChange(e, key) {
if (key === 'study') { if (key === 'study') {
console.log(this.studyList, 'this.studyList')
this.seriesList = this.studyList.find(item => item.StudyId === this.form.studyId).SeriesArr this.seriesList = this.studyList.find(item => item.StudyId === this.form.studyId).SeriesArr
} }
if (key === 'series') { if (key === 'series') {
@ -142,6 +150,20 @@ export default {
this.segmentList = list.filter(item => item.SegmentJson) this.segmentList = list.filter(item => item.SegmentJson)
} }
}, },
handleClear(e, key) {
if (key === 'study') {
this.form.seriesId = null
this.form.segmentGroupId = null
this.form.segmentId = null
}
if (key === 'series') {
this.form.segmentGroupId = null
this.form.segmentId = null
}
if (key === 'segmentGroup') {
this.form.segmentId = null
}
},
handleCancel() { handleCancel() {
this.$emit("update:visible", false) this.$emit("update:visible", false)
}, },

View File

@ -78,8 +78,10 @@ import * as cornerstoneTools from '@cornerstonejs/tools'
import { createImageIdsAndCacheMetaData } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/createImageIdsAndCacheMetaData' import { createImageIdsAndCacheMetaData } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/createImageIdsAndCacheMetaData'
import setCtTransferFunctionForVolumeActor from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setCtTransferFunctionForVolumeActor' import setCtTransferFunctionForVolumeActor from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setCtTransferFunctionForVolumeActor'
import { setCtMappingRange } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setCtTransferFunctionForVolumeActor' import { setCtMappingRange } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setCtTransferFunctionForVolumeActor'
import { setPetColorMapTransferFunctionForVolumeActor } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setPetColorMapTransferFunctionForVolumeActor'
import { vec3, mat4 } from 'gl-matrix' import { vec3, mat4 } from 'gl-matrix'
import {
setPetTransferFunctionForVolumeActor
} from './helpers/index.js'
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent' import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
export default { export default {
name: 'MPRViewport', name: 'MPRViewport',
@ -537,7 +539,8 @@ export default {
.setVolumes([{ .setVolumes([{
volumeId: this.volumeId, callback: (r) => { volumeId: this.volumeId, callback: (r) => {
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') { if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
setPetColorMapTransferFunctionForVolumeActor(r, true) setPetTransferFunctionForVolumeActor(r)
// viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
} else { } else {
const voi = metaData.get('voiLutModule', res.volume._imageIds[Math.ceil((res.volume._imageIds.length - 1) / 2)]) const voi = metaData.get('voiLutModule', res.volume._imageIds[Math.ceil((res.volume._imageIds.length - 1) / 2)])
setCtMappingRange(voi.windowWidth[0], voi.windowCenter[0]) setCtMappingRange(voi.windowWidth[0], voi.windowCenter[0])
@ -555,6 +558,16 @@ export default {
DicomEvent.$emit("isloaded", { isChange: data.isChange }) DicomEvent.$emit("isloaded", { isChange: data.isChange })
}) })
viewport.render() viewport.render()
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
setTimeout(() => {
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
viewport.resetProperties()
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
viewport.render()
renderingEngine.render()
}, 100)
}
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }