分割部分问题解决

uat_us
wangxiaoshuang 2026-04-30 14:54:16 +08:00
parent afc35daffa
commit c12da4de3e
4 changed files with 77 additions and 60 deletions

View File

@ -120,6 +120,10 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
isMPR: {
type: Boolean,
default: false
},
actionConfiguration: { actionConfiguration: {
type: Object, type: Object,
default: () => { default: () => {
@ -251,6 +255,7 @@ export default {
}, },
SegmentConfig: { SegmentConfig: {
handler() { handler() {
if (!this.isMPR) return false
if (!this.segmentationId) return false if (!this.segmentationId) return false
if (!this.series.TaskInfo) return false if (!this.series.TaskInfo) return false
readingSegmentByConfig(this.series, this.series.TaskInfo, this.viewportId, this.segmentationId, this.SegmentConfig) readingSegmentByConfig(this.series, this.series.TaskInfo, this.viewportId, this.segmentationId, this.SegmentConfig)
@ -258,11 +263,13 @@ export default {
deep: true deep: true
}, },
segmentIndex() { segmentIndex() {
if (!this.isMPR) return false
if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false
if (this.segmentIndex <= 0) return false if (this.segmentIndex <= 0) return false
selectSegment(this.viewportId, this.segmentationId, this.segmentIndex) selectSegment(this.viewportId, this.segmentationId, this.segmentIndex)
}, },
segmentationId() { segmentationId() {
if (!this.isMPR) return false
if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false
if (!this.segmentationId) return false if (!this.segmentationId) return false
selectSegmentation(this.viewportId, this.segmentationId) selectSegmentation(this.viewportId, this.segmentationId)
@ -665,8 +672,11 @@ export default {
renderingEngine.render() renderingEngine.render()
}, 100) }, 100)
} }
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex) if (this.isMPR) {
DicomEvent.$emit('SegmentationLoading', this.viewportId) await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex)
DicomEvent.$emit('SegmentationLoading', this.viewportId)
}
let volume = cache.getVolume(this.volumeId) let volume = cache.getVolume(this.volumeId)
// console.log(volume, 'volume') // console.log(volume, 'volume')
if (this.series.orientation === 'AXIAL' && this.series.curIndex) return this.setFullScreen(this.series.curIndex) if (this.series.orientation === 'AXIAL' && this.series.curIndex) return this.setFullScreen(this.series.curIndex)

View File

@ -344,7 +344,7 @@
:viewport-index="index" :histogramVisible="histogramVisible" :viewport-index="index" :histogramVisible="histogramVisible"
:actionConfiguration="actionConfiguration" :SegmentConfig="SegmentConfig" :actionConfiguration="actionConfiguration" :SegmentConfig="SegmentConfig"
:segmentationId.sync="segId" :segmentIndex.sync="segIndex" :curSegSeries.sync="curSegSeries" :segmentationId.sync="segId" :segmentIndex.sync="segIndex" :curSegSeries.sync="curSegSeries"
:MPRInfo="MPRInfo" @activeViewport="activeViewport" @setMPRInfo="setMPRInfo" :isMPR="isMPR" :MPRInfo="MPRInfo" @activeViewport="activeViewport" @setMPRInfo="setMPRInfo"
@toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD" @toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD"
@renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" @renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup"
@resetHistogram="resetHistogram" v-resize="(e) => handleSizeChange(e, `viewport-MPR-${index}`)" /> @resetHistogram="resetHistogram" v-resize="(e) => handleSizeChange(e, `viewport-MPR-${index}`)" />

View File

@ -127,7 +127,7 @@
</el-switch> </el-switch>
<span style="margin-left: 5px;">{{ <span style="margin-left: 5px;">{{
$t('trials:reading:Segmentations:title:InactiveSegmentationsShow') $t('trials:reading:Segmentations:title:InactiveSegmentationsShow')
}}</span> }}</span>
</div> </div>
</div> </div>
<template v-if="segmentList.length > 0"> <template v-if="segmentList.length > 0">
@ -163,7 +163,8 @@
<i class="el-icon-warning-outline" style="color:red;margin-right: 5px;" <i class="el-icon-warning-outline" style="color:red;margin-right: 5px;"
:title="$t('trials:reading:Segmentations:tip:segmentationIsNotSave')" :title="$t('trials:reading:Segmentations:tip:segmentationIsNotSave')"
v-if="!curSegmentGroup.isSaved"></i> v-if="!curSegmentGroup.isSaved"></i>
<el-button type="success" size="small" :disabled="saveLoading || isMPR" <el-button type="success" size="small"
:disabled="saveLoading || isMPR || curSegmentGroup.isSaved"
@click="saveSegmentGroup([curSegmentGroup])"> @click="saveSegmentGroup([curSegmentGroup])">
{{ $t("trials:reading:Segmentations:button:save") }} {{ $t("trials:reading:Segmentations:button:save") }}
</el-button> </el-button>
@ -253,7 +254,8 @@
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
<div class="saveBtnBox" v-if="readingTaskState < 2 && segmentList && segmentList.length > 1"> <div class="saveBtnBox" v-if="readingTaskState < 2 && segmentList && segmentList.length > 1">
<el-button type="success" size="small" :disabled="saveLoading || isMPR" @click="saveSegmentGroup()"> <el-button type="success" size="small" :disabled="saveLoading || isMPR || curSegmentGroup.isSaved"
@click="saveSegmentGroup()">
{{ $t("trials:reading:Segmentations:button:saveAll") }} {{ $t("trials:reading:Segmentations:button:saveAll") }}
</el-button> </el-button>
</div> </div>
@ -1537,7 +1539,7 @@ export default {
segmentGroup.segUrl = this.$getObjectName(result.url) segmentGroup.segUrl = this.$getObjectName(result.url)
DicomEvent.$emit("IsBeSegment", { StudyId: this.series.StudyId, Id: this.series.Id, IsBeSegment: true }) DicomEvent.$emit("IsBeSegment", { StudyId: this.series.StudyId, Id: this.series.Id, IsBeSegment: true })
} else { } else {
segmentGroup.segUrl = null return this.$confirm(this.$t("segment:saveSegmention:notSEG"))
} }
this.addOrUpdateSegmentation({ name: segmentGroup.name, id: segmentGroup.segmentationId, url: segmentGroup.segUrl }) this.addOrUpdateSegmentation({ name: segmentGroup.name, id: segmentGroup.segmentationId, url: segmentGroup.segUrl })

View File

@ -112,6 +112,7 @@ async function loadSegmentation(arrayBuffer, series, segmentationId) {
}) })
const megmentGroup = const megmentGroup =
segmentation.state.getSegmentation(segmentationId); segmentation.state.getSegmentation(segmentationId);
if (!megmentGroup) return false
const { imageIds } = megmentGroup.representationData.Labelmap; const { imageIds } = megmentGroup.representationData.Labelmap;
const derivedSegmentationImages = imageIds.map(imageId => const derivedSegmentationImages = imageIds.map(imageId =>
cache.getImage(imageId) cache.getImage(imageId)
@ -226,10 +227,11 @@ async function readingSegmentByConfig(series, visitInfo, viewportId, segmentatio
) )
} }
function selectSegmentation(viewportId, segmentationId) { function selectSegmentation(viewportId, segmentationId) {
if (!segmentation.state.getSegmentation(segmentationId)) return false
segmentation.activeSegmentation.setActiveSegmentation(viewportId, segmentationId) segmentation.activeSegmentation.setActiveSegmentation(viewportId, segmentationId)
} }
function selectSegment(viewportId, segmentationId, segmentIndex) { function selectSegment(viewportId, segmentationId, segmentIndex) {
if (!segmentIndex || !segmentationId) return false if (!segmentIndex || !segmentationId || !segmentation.state.getSegmentation(segmentationId)) return false
selectSegmentation(viewportId, segmentationId) selectSegmentation(viewportId, segmentationId)
segmentation.segmentIndex.setActiveSegmentIndex(segmentationId, segmentIndex); segmentation.segmentIndex.setActiveSegmentIndex(segmentationId, segmentIndex);
} }
@ -354,63 +356,66 @@ async function renderSegmentation(series, visitInfo, viewportId, SegmentConfig,
PageSize: 9999, PageSize: 9999,
PageIndex: 1, PageIndex: 1,
} }
let res = await getSegmentationList(data); setTimeout(async () => {
if (res.IsSuccess) { let res = await getSegmentationList(data);
let list = res.Result.CurrentPageData; if (res.IsSuccess) {
for (let i = 0; i < list.length; i++) { let list = res.Result.CurrentPageData;
let item = list[i] for (let i = 0; i < list.length; i++) {
if (!segmentationId) segmentationId = item.Id let item = list[i]
await createSegmentation(viewportId, series.SeriesInstanceUid, item.Id) if (!segmentationId) segmentationId = item.Id
if (item.SEGUrl) await readSegmentation(item.SEGUrl, series, item.Id) await createSegmentation(viewportId, series.SeriesInstanceUid, item.Id)
createSegmentationRepresentation(viewportId, item.Id) if (item.SEGUrl) await readSegmentation(item.SEGUrl, series, item.Id)
if (!viewportInfo[viewportId]) { createSegmentationRepresentation(viewportId, item.Id)
viewportInfo[viewportId] = [item.Id] if (!viewportInfo[viewportId]) {
} else { viewportInfo[viewportId] = [item.Id]
viewportInfo[viewportId].push(item.Id) } else {
} viewportInfo[viewportId].push(item.Id)
let params = { }
SegmentationId: item.Id, let params = {
PageSize: 9999, SegmentationId: item.Id,
PageIndex: 1, PageSize: 9999,
} PageIndex: 1,
let r = await getSegmentList(params) }
if (r.IsSuccess) { let r = await getSegmentList(params)
let segments = r.Result.CurrentPageData if (r.IsSuccess) {
segments.forEach(s => { let segments = r.Result.CurrentPageData
if (!segmentIndex) segmentIndex = s.SegmentNumber segments.forEach(s => {
let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {}; if (!segmentIndex) segmentIndex = s.SegmentNumber
segmentation.segmentIndex.setActiveSegmentIndex(s.SegmentationId, s.SegmentNumber); let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {};
segmentation.config.color.setSegmentIndexColor(viewportId, s.SegmentationId, s.SegmentNumber, hex2Rgb(s.ColorRgb)) segmentation.segmentIndex.setActiveSegmentIndex(s.SegmentationId, s.SegmentNumber);
segmentation.segmentLocking.setSegmentIndexLocked(s.SegmentationId, s.SegmentNumber, s.IsLock) segmentation.config.color.setSegmentIndexColor(viewportId, s.SegmentationId, s.SegmentNumber, hex2Rgb(s.ColorRgb))
if (SegmentJson.bidirectional) { segmentation.segmentLocking.setSegmentIndexLocked(s.SegmentationId, s.SegmentNumber, s.IsLock)
let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional"); if (SegmentJson.bidirectional) {
if (!an) { let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
let { majorAxis, minorAxis } = SegmentJson.bidirectional if (!an) {
// createSegmentConfiguration(s.SegmentNumber, s.SegmentationId, viewportId, actionConfiguration) let { majorAxis, minorAxis } = SegmentJson.bidirectional
SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], { // createSegmentConfiguration(s.SegmentNumber, s.SegmentationId, viewportId, actionConfiguration)
segmentIndex: s.SegmentNumber, SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], {
segmentationId: s.SegmentationId, segmentIndex: s.SegmentNumber,
}) segmentationId: s.SegmentationId,
})
}
an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
if (an) {
annotation.locking.setAnnotationLocked(an.annotationUID, true)
annotation.visibility.setAnnotationVisibility(an.annotationUID, true)
}
} }
an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
if (an) {
annotation.locking.setAnnotationLocked(an.annotationUID, true)
annotation.visibility.setAnnotationVisibility(an.annotationUID, true)
}
}
}) })
} }
if (segmentationId && segmentIndex) { if (segmentationId && segmentIndex) {
selectSegment(viewportId, segmentationId, segmentIndex) selectSegment(viewportId, segmentationId, segmentIndex)
} }
if (Segment) { if (Segment) {
jumpBidirectional(Segment, viewportId, series.SeriesInstanceUid) jumpBidirectional(Segment, viewportId, series.SeriesInstanceUid)
}
} }
} }
} readingSegmentByConfig(series, visitInfo, viewportId, segmentationId, SegmentConfig)
readingSegmentByConfig(series, visitInfo, viewportId, segmentationId, SegmentConfig) }, 500)
} catch (err) { } catch (err) {
console.log(err) console.log(err)
} }